Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-12-2008, 12:22   #1
alvise_91
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 4
[JAVA] problema THREAD in GIOCO help urgente

ciao a tutti ragazzi! premetto che sono nuovo di quì, sono passato un sacco di volte e o trovato info sempre utili... ora vi posto il mio problema che da una settimana non riesco a risolvere.

o creato un piccolo giochetto, praticamente la classe del gioco 'MemoRally.java' che estende un JFrame attraverso un Thread esterno fa girare un scpecie di macchinetta. prima di questo però c'è la classe Game.java che fa sciegliere all'utente tutte le impostazioni. allora quando mettevo io i parametri per MemoRally andava tutto bene e funzionava..ora pero che li passo attraverso Game.java non so come si blocca sul thread e non fa nulla. ovvero il thread gira ma punto. posto tutto il codice di Game.java e MemoRally.java. grazie a chi mi aiuta =)

PS: prima che vi leggiate il codice volevo dire che sono in 4^a ad un itis e quindi tutte queste cose me le imparo da solo quindi se il codice è scritto male scusatemi. sono aperto a tutti i consigli.



"MemoRally.java"
Codice:
import java.awt.*;
import javax.imageio.*;
import javax.swing.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import java.awt.geom.*;
import java.lang.*;
import java.util.*;

public class MemoRally extends JFrame implements ActionListener {
	

	int x;
	int y;
	double statoV;
	double statoD;
	double velocitaMax;
	double velocitaMin;
	double attrito;
	double incrementoV;
	double incrementoD;
	double direzione;
	double velocita;
	String[] vett;
	
	Boolean iniziabile = false;
	
	Image imgSfnd;
	Image imgCar;

	public MemoRally (String[] vettore) {
		super("MemoRally");
		iniziabile = false;
		this.vett = vettore;
		//System.out.println("vett: " + vett);
		x = Integer.parseInt(vett[8]);
		y = Integer.parseInt(vett[9]);
		direzione = Integer.parseInt(vett[10]);
		velocita = 0;		
		statoV = 0;
		statoD = 0;
		velocitaMax = 20;
		velocitaMin = -2;
		attrito = 3;
		incrementoV = 0.5;
		incrementoD = 10;
		System.out.println("*********************" + vett[7]);
		System.out.println("*********************" + vett[6]);
		try{
			imgSfnd = ImageIO.read(new File("circuito1.jpg"));
			imgCar = ImageIO.read(new File(vett[6]));
		}
		catch(Exception e)
		{
			System.out.println("failed");
		}
		
		addKeyListener(new KeyListener() {
			public void keyReleased(KeyEvent e) {
				System.out.println("RELEASED: " + e.getKeyCode());
				if (e.getKeyCode()==Integer.parseInt(vett[1])) {
					aggiornaV("stop");		
				}
				if (e.getKeyCode()==Integer.parseInt(vett[2])) {
					aggiornaV("stop");
				}
				if (e.getKeyCode()==Integer.parseInt(vett[3])) {
					aggiornaD("stop");
				}
				if (e.getKeyCode()==Integer.parseInt(vett[4])) {
					aggiornaD("stop");
				}
			}		
			public void keyPressed(KeyEvent e) {
						//aggiornaTutto();
				System.out.println("PRESSED: " + e.getKeyCode());
				if (e.getKeyCode()==Integer.parseInt(vett[1])) {
					aggiornaV("accelera");		
				}
				if (e.getKeyCode()==Integer.parseInt(vett[2])) {
					aggiornaV("frena");
				}
				if (e.getKeyCode()==Integer.parseInt(vett[3])) {
					aggiornaD("sinistra");
				}
				if (e.getKeyCode()==Integer.parseInt(vett[4])) {
					aggiornaD("destra");
				}
				if (e.getKeyCode()==Integer.parseInt(vett[5])) {
					direzione = 0;
					velocita = 0;
					x = 200;
					y = 200;
				}
			}		
			public void keyTyped(KeyEvent e) {
				System.out.println("TYPED: " + e.getKeyCode());
			}
	    });

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocation(20, 20);
  		setSize(new Dimension(1024,768));
		setResizable(false);
		setVisible(true);
		
		iniziabile = true;
		
		Thred aggiorna = new Thred(500, this);
		aggiorna.run();
	}
	
	
	public void actionPerformed(ActionEvent e) {
		
	}
	
	public Boolean partibile () {
		return iniziabile;
	}
	
	
	public void aggiornaTutto () {
		System.out.println("STATO V: " + statoV + "      STATO D: " + statoD);
		if (statoV == 0) {
			if (velocita > 0) {
				velocita = velocita - attrito;
				if (velocita < 0) {
					velocita = 0;
				}
			} else if (velocita < 0) {
				velocita = velocita + attrito;
				if (velocita > 0) {
					velocita = 0;
				}
			}
		} else {
			velocita = velocita + (incrementoV * statoV);
		}
		if (velocita > velocitaMax) {
			velocita = velocitaMax;
		} else if (velocita < velocitaMin) {
			velocita = velocitaMin;
		}
		direzione = direzione + (incrementoD * statoD);
		if (direzione > 360) {
			direzione = direzione - 360;
		} else if (direzione < 360) {
			direzione = direzione + 360;
		}			
	}
		
	public void aggiornaV (String m) {
		String s;
		s = m;
		if ( s== "accelera") {
			statoV = 1;
		} else if ( s== "frena") {
			statoV = -1;
		} else if ( s== "stop") {
			statoV = 0;
		}
		//aggiornaTutto();

	}
		
	public void aggiornaD (String s) {
		if ( s== "destra") {
			statoD = 1;
		} else if ( s== "sinistra") {
			statoD = -1;
		} else if ( s== "stop") {
			statoD = 0;
		}
		//aggiornaTutto();
	}
		
	
	public void calcolaPos (double d, double v) {
		x = x + (int)(Math.cos(Math.toRadians(d - 90)) * v);
		y = y + (int)(Math.sin(Math.toRadians(d - 90)) * v);		
	}
	
	
	
	public void paint (Graphics g){	
		//System.out.println(img);
		g.drawImage(imgSfnd, 0, 0, this);
		Graphics2D g2d = (Graphics2D)g;
		AffineTransform original = g2d.getTransform();
		AffineTransform rotated = (AffineTransform)(original.clone());
		int xRot = x + (imgCar.getWidth(this)/2);//this.getWidth()/2;
		int yRot = y + (imgCar.getHeight(this)/2);//this.getHeight()/2;
		rotated.rotate(Math.toRadians(direzione), xRot, yRot);
        g2d.setTransform(rotated);
        calcolaPos(direzione, velocita);
        g2d.drawImage(imgCar, x, y, this);
        g2d.setTransform(original);
        /*System.out.println("X" + x);
		System.out.println("Y" + y);
		System.out.println("DIREZIONE" + direzione);
		System.out.println("VELOCITA" + velocita);*/
		//g.drawImage(imgCar, x, y, this);
	}	
}

class Thred extends Thread{
  private int sleeppo;
  MemoRally test;

  public Thred(int millisec, MemoRally prova){
    sleeppo = millisec;
    test = prova;
  }

  public void run(){
    try{
      while(true){
        //System.out.println("Lo scrivo ogni " + (sleeppo/1000) +" secondi");
        test.aggiornaTutto();
        test.repaint();
        sleep(sleeppo);
        }
    }
    catch(InterruptedException e){
      System.out.println("Thread bloccato");
        }
  }
}


"Game.java"

Codice:
import java.awt.*;
import javax.imageio.*;
import javax.swing.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import java.awt.geom.*;
import java.lang.*;
import java.util.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.event.*;

public class Game extends JFrame implements ActionListener {
	
	JPanel infoPlayer;
	JPanel infoTrack;
	JPanel infoListaTrack;
	JPanel infoListaPlayer;
	JPanel bottoni;
	JList listaPlayer;
	JList listaTrack;
	JButton selCircuito = new JButton("Seleziona Circuito");
	JButton selPlayer = new JButton("Seleziona Giocatore");
	
	
	JLabel[] datiPlayer;
	JLabel nomeTracciato;
	JSlider numeroDiGiri;
	JLabel immiTracciato;
	String[] vettoreGiocatoriPath;
	String[] vettoreGiocatoriString;
	String[] vettoreTrackPath;
	String[] vettoreTrackString;
	String[] informazioniCircuito;
	
	public MemoRally istanzaDiGioco;
	
	FileFilter jpgFilter = new FileNameExtensionFilter("JPEG file", "jpg", "jpeg");
	private String scanPath;
	JFileChooser directoryOpen;
	int tasto = 0;
	JFrame pannello;
	JLabel numeroDiGiriMostra;
	JFrame nuovoPlayer;	
	
	public Game () {
		super("MemoRally");
		this.getContentPane().setLayout(new FlowLayout());//GridLayout(2,2,30,50));
		JPanel informazioni = new JPanel();
		informazioni.setLayout(new GridLayout(2,1));
		
		infoPlayer = new JPanel();
		infoPlayer.add(preparaPnlPlayer());
		infoPlayer.setBackground(Color.GREEN);
		infoPlayer.setSize(700,256);

		infoTrack = new JPanel();
		infoTrack.add(preparaPnlTrack());
		infoTrack.setBackground(Color.RED);
		infoTrack.setSize(700,256);

		infoListaPlayer = new JPanel();
		infoListaPlayer.add(preparaPnlListaPlayer());
		infoListaPlayer.setBackground(Color.RED);
		infoListaPlayer.setSize(324,512);
		
		infoListaTrack = new JPanel();
		infoListaTrack.add(preparaPnlListaTrack());
		infoListaTrack.setBackground(Color.GREEN);
		infoListaTrack.setSize(700,256);
		
		bottoni = new JPanel();
		bottoni.add(preparaPnlBottoni());
		bottoni.setBackground(Color.GREEN);
		bottoni.setSize(324,256);
		
		informazioni.add(infoPlayer);
		informazioni.add(infoTrack);
		informazioni.setSize(700,512);
		
		


		this.getContentPane().add(informazioni, BorderLayout.WEST);
		this.getContentPane().add(infoListaPlayer);
		this.getContentPane().add(infoListaTrack);
		this.getContentPane().add(bottoni);
		//this.getContentPane().add(infoTrack);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocation(20, 20);
  		setSize(new Dimension(1024,768));
		setResizable(false);
		//pack();
		setVisible(true);
	}
	
	
	private JPanel preparaPnlPlayer () {
		JPanel p = new JPanel();
		JPanel p1 = new JPanel();
		JPanel p2 = new JPanel();
		p.setLayout( new FlowLayout());
		p.setSize(700,256);
		p1.setLayout( new GridLayout(7,2));
		p1.add(new JLabel("Informazioni GIOCATORE"));
		p1.add(new JLabel("     "));
		p1.add(new JLabel("Nome : "));
		
		datiPlayer = new JLabel[7];
		for (int i = 0; i < 7; i++){
			datiPlayer[i] = new JLabel(" --- ");
		}
		
		p1.add(datiPlayer[0]);
		JButton accelera = new JButton("Accelera");
		accelera.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					lettureDeiTasti(1);
		}});
		p1.add(accelera);
		p1.add(datiPlayer[1]);
		JButton frena = new JButton("Frena");
		frena.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					lettureDeiTasti(2);
		}});
		p1.add(frena);
		p1.add(datiPlayer[2]);
		JButton sinistra = new JButton("Sinistra");
		sinistra.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					lettureDeiTasti(3);
		}});
		p1.add(sinistra);
		p1.add(datiPlayer[3]);
		JButton destra = new JButton("Destra");
		destra.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					lettureDeiTasti(4);
		}});
		p1.add(destra);
		p1.add(datiPlayer[4]);
		JButton pausa = new JButton("Pausa");
		pausa.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					lettureDeiTasti(5);
		}});
		p1.add(pausa);
		p1.add(datiPlayer[5]);
		p2.setLayout( new GridLayout(2,1));
		JButton scegliMacchina = new JButton("Carica Macchina");
		scegliMacchina.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					scegliMacchina();
		}});
		p2.add(scegliMacchina);		
		p2.add(datiPlayer[6]);
		
		
		
		
		/*p1.add(datiPlayer[]);
		p1.add(new JButton("Frena"));
		p1.add(datiPlayer[]);
		p1.add(new JButton("Sinistra"));
		p1.add(datiPlayer[]);
		p1.add(new JButton("Destra"));
		p1.add(datiPlayer[]);
		p1.add(new JButton("Pausa"));
		p1.add(datiPlayer[]);*/
		
		p.add(p1);
		p.add(p2);
		return p;
	}
	
	private JPanel preparaPnlBottoni () {
		JPanel p = new JPanel();
		p.setSize(324,256);
		JButton selezionaCircuito = new JButton("Seleziona il circuito");
		selezionaCircuito.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					selezionaCircuito();
		}});
		p.add(selezionaCircuito);
		JButton selezionaGiocatore = new JButton("Seleziona il giocatore");
		selezionaGiocatore.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					selezionaGiocatore();
		}});
		p.add(selezionaGiocatore);
		JButton gioca = new JButton("Gioca!");
		gioca.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					gioca();
		}});
		p.add(gioca);
		return p;		
	}
	
	private JPanel preparaPnlTrack () {
		JPanel p = new JPanel();
		p.setSize(700,256);
		JPanel p1 = new JPanel();
		JPanel p2 = new JPanel();
		JPanel p3 = new JPanel();
		p.setLayout( new FlowLayout());
		p1.setLayout( new GridLayout(3,2));
		//p3.setLayout( new FlowLayout());
		p1.add(new JLabel("Informazioni TRACCIATO"));
		p1.add(new JLabel("     "));
		p1.add(new JLabel("Nome : "));
		
		nomeTracciato = new JLabel(" ---- ");
		p1.add(nomeTracciato);
		
		p1.add(new JLabel("Numero di giri : "));
		numeroDiGiriMostra = new JLabel();
		numeroDiGiri = new JSlider(JSlider.HORIZONTAL, 1, 100, 3);
		numeroDiGiri.setMajorTickSpacing(2);
		numeroDiGiri.addChangeListener( new ChangeListener () {
			public void stateChanged ( ChangeEvent t) {
				numeroDiGiriMostra.setText(Integer.toString(numeroDiGiri.getValue()));
			}
		});
		p3.add(numeroDiGiri);
		numeroDiGiriMostra.setText(Integer.toString(numeroDiGiri.getValue()));
		p3.add(numeroDiGiriMostra);
		p1.add(p3);
		p2.add(new JLabel("Immagine : "));
		immiTracciato = new JLabel(" ---- ");
		p2.add(immiTracciato);
		p.add(p1);
		p.add(p2);
		return p;	
	}

	private JPanel preparaPnlListaPlayer () {
		JPanel p = new JPanel();
		JPanel p2 = new JPanel();
		p.setLayout( new GridLayout(2,1));
		p.setSize(324,500);
		p2.setSize(324,80);
		JButton aggiungiPlayer = new JButton("Aggiungi un giocatore");
		aggiungiPlayer.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					aggiungiPlayer();
		}});
		JButton salvaPlayer = new JButton("Salva il giocatore");
		salvaPlayer.addActionListener( new ActionListener () {
				public void actionPerformed(ActionEvent e) {
					salvaPlayer();
		}});
		preparaVettorePlayer();
		listaPlayer = new JList(vettoreGiocatoriString);
		listaPlayer.setSize(324,420);
		JScrollPane scrollaGiocatori = new JScrollPane(listaPlayer);
		scrollaGiocatori.setSize(324,420);
		
		p2.add(aggiungiPlayer);
		p2.add(salvaPlayer);
		p.add(p2);
		p.add(scrollaGiocatori);
		return p;	
	}

	private JPanel preparaPnlListaTrack () {
		JPanel p = new JPanel();
		p.setSize(700,256);
		preparaVettoreTrack();
		listaTrack = new JList(vettoreTrackString);
		listaTrack.setSize(700,256);
		JScrollPane scrollaTrack = new JScrollPane(listaTrack);
		scrollaTrack.setSize(700,256);
		p.add(scrollaTrack);
		return p;	
	}
	
	public void actionPerformed(ActionEvent e) {	
	}
	
	public void selezionaCircuito () {
		if (listaTrack.getSelectedIndex()>= 0){
			ArrayList tempString = new ArrayList();
			try {
				File fileInput = new File(vettoreTrackPath[listaTrack.getSelectedIndex()]);
				FileReader input = new FileReader(fileInput.getAbsolutePath());
				int temp = input.read();
				String ris = "";
				while ( temp != - 1 ) { 
					if ((temp >= 48) && (temp <= 57)) {
						while (temp != 120) {
							ris = ris + Character.toString((char)temp);
							temp = input.read(); 
						}
						tempString.add(ris);
						ris = "";
					}
					temp = input.read(); 
				} 			
			} catch (FileNotFoundException e1) {
				System.out.println();
			} catch (IOException e2) {
				e2.printStackTrace();
			}
			System.out.println(tempString);
			nomeTracciato.setText(vettoreTrackString[listaTrack.getSelectedIndex()]);
			informazioniCircuito = new String[tempString.size()];
			for (int i = 0; i < informazioniCircuito.length; i++){
				informazioniCircuito[i] = (String)tempString.get(i);
				System.out.println("info circuito " + informazioniCircuito[i]);			
			}
		}
	}
	
	public void selezionaGiocatore () {
		if (listaPlayer.getSelectedIndex()>= 0){
			ArrayList tempString = new ArrayList();
			try {
				File fileInput = new File(vettoreGiocatoriPath[listaPlayer.getSelectedIndex()]);
				FileReader input = new FileReader(fileInput.getAbsolutePath());
				int temp = input.read();
				String ris = "";
				while ( temp != - 1 ) { 
					if (((temp >= 48) && (temp <= 57)) || ((temp >= 65) && (temp <= 90)) || ((temp >= 97) && (temp <= 122))) {
						while (temp != 126) {
							ris = ris + Character.toString((char)temp);
							temp = input.read();
							//System.out.println(ris);
						}
						tempString.add(ris);
						ris = "";
					}
					temp = input.read(); 
				} 				
			} catch (FileNotFoundException e1) {
				System.out.println();
			} catch (IOException e2) {
				e2.printStackTrace();
			}
			//System.out.println(tempString);
			datiPlayer[0].setText(vettoreGiocatoriString[listaPlayer.getSelectedIndex()]);
			for (int i = 1; i < 7; i++){
				datiPlayer[i].setText((String)tempString.get(i - 1));			
			}
		}
	}
	public void salvaPlayer () {
		Boolean ris = true;
		for (int i =0; i < 7; i++){
			if (datiPlayer[i].getText() == " --- ") {
				ris = false;
			}
		}
		if (ris) {
			try {
				PrintWriter fout = new PrintWriter(new FileWriter("giocatori/" + datiPlayer[0].getText()));
				for (int i = 1; i < 7; i++){
					fout.println(datiPlayer[i].getText() + "~");
				}				
				fout.close();
			} catch (IOException e) {
		        e.printStackTrace();
        	}		
		} else {
			JOptionPane.showConfirmDialog(null, " Inserire tutti i dati prima!", "salva giocatore",JOptionPane.YES_OPTION);
		}		
	}
	
	public void preparaVettorePlayer () {
		File cartellaPlayer = new File ("giocatori/");
		File[] l = cartellaPlayer.listFiles();
		ArrayList vettoreGiocatori = new ArrayList();
		for (int i = 0; i < l.length; i++){
			if (l[i].getAbsolutePath().substring(l[i].getAbsolutePath().length()-3).equals("txt")) {
				vettoreGiocatori.add(l[i].getAbsolutePath());
			} 
		}
		vettoreGiocatoriString = new String[vettoreGiocatori.size()];
		vettoreGiocatoriPath = new String[vettoreGiocatori.size()];
		int lunghezza = vettoreGiocatori.size();
		String appoggioString;
		for (int i = 0; i < lunghezza; i++){
			appoggioString = (String)vettoreGiocatori.get(i);
			vettoreGiocatoriString[i] = appoggioString.substring(appoggioString.lastIndexOf("\\")+1);
			vettoreGiocatoriPath[i] = appoggioString;
		}
	}

	public void preparaVettoreTrack () {
		File cartellaTrack = new File ("tracciati/");
		File[] l = cartellaTrack.listFiles();
		ArrayList vettoreTrack = new ArrayList();
		for (int i = 0; i < l.length; i++){
			if (l[i].getAbsolutePath().substring(l[i].getAbsolutePath().length()-3).equals("txt")) {
				vettoreTrack.add(l[i].getAbsolutePath());
			} 
		}
		vettoreTrackString = new String[vettoreTrack.size()];
		vettoreTrackPath = new String[vettoreTrack.size()];
		int lunghezza = vettoreTrack.size();
		String appoggioString;
		for (int i = 0; i < lunghezza; i++){
			appoggioString = (String)vettoreTrack.get(i);
			vettoreTrackString[i] = appoggioString.substring(appoggioString.lastIndexOf("\\")+1);
			vettoreTrackPath[i] = appoggioString;
		}
	}
	
	public void leggiTastoDaOption () {
		pannello = new JFrame("Lettura Tasto");
		JButton oro = new JButton("Ok");
		pannello.setLayout( new FlowLayout());
	    oro.addKeyListener(new KeyListener() {
			public void keyReleased(KeyEvent e) {
			}		
			public void keyPressed(KeyEvent e) {
				if (tasto > 0) {
					datiPlayer[tasto].setText(Integer.toString(e.getKeyCode()));
					pannello.setVisible(false);
					tasto = 0;				
				}
			}		
			public void keyTyped(KeyEvent e) {
			}
	    });
	    pannello.add(oro);
	    pannello.setSize(100,100);
	    pannello.setLocation(500,400);
	    pannello.setVisible(true);		
	}
	
/*	public void accelera () {
		tasto = 1;
		leggiTastoDaOption();		
	}	
	public void frena () {
		tasto = 2;
		leggiTastoDaOption();	
	}
	public void sinistra () {
		tasto = 3;
		leggiTastoDaOption();
	}
	public void destra () {
		tasto = 4;
		leggiTastoDaOption();	
	}*/
	public void lettureDeiTasti (int n) {
		tasto = n;
		leggiTastoDaOption();	
	}
	public void scegliMacchina () {
		directoryOpen = new JFileChooser(new File("Game.java"));
		directoryOpen.setFileFilter(jpgFilter);
		directoryOpen.setFileSelectionMode(JFileChooser.FILES_ONLY);
		int approva = directoryOpen.showOpenDialog(null);
		if (approva == JFileChooser.APPROVE_OPTION) {
			File x = directoryOpen.getSelectedFile();
			scanPath = x.getAbsolutePath();
		}
		datiPlayer[6].setText(scanPath);
	}
	
	public void aggiungiPlayer () {
		String nomeTemporaneo;
		do {
			nomeTemporaneo = JOptionPane.showInputDialog("Nome: ", null);
		} while (nomeTemporaneo.length()<=1);
		try {
			PrintWriter fout = new PrintWriter(new FileWriter("giocatori/" + nomeTemporaneo + ".txt"));
			fout.close();
		} catch (IOException e) {
	        e.printStackTrace();
        }			
		preparaVettorePlayer ();
		listaPlayer.setListData(vettoreGiocatoriString);
	}
	public void gioca () {
		String[] infoTotali = new String[7 + informazioniCircuito.length];
		
		for (int i = 0; i < 7; i++) {
			infoTotali[i] = datiPlayer[i].getText();
		}
		System.out.println(informazioniCircuito[3]);
		infoTotali[7] = vettoreTrackPath[listaTrack.getSelectedIndex()];
		for (int i = 8; i < informazioniCircuito.length + 7; i++) {
			System.out.println(infoTotali[i] + " ----- " + informazioniCircuito[i-8]);
			infoTotali[i] = informazioniCircuito[i - 8];
			System.out.println(i - 8);
			System.out.println(i);
			System.out.println(infoTotali[i] + " ----- " + informazioniCircuito[i-8]);
		}
		for (int i = 0; i < infoTotali.length; i++){
			System.out.println("i " + i + " info " + infoTotali[i]);
		}
		//this.setVisible(false);
		//System.out.println("vett: " + infoTotali);
		this.dispose();
		MemoRally istanzaDiGioco = new MemoRally(infoTotali);
		//System.out.println("3" + istanzaDiGioco.partibile());
		//Thred aggiorna = new Thred(50, this); //, istanzaDiGioco);
		//aggiorna.run();
	}
	
	public void aggiornaQualche () {
		System.out.println("3" + istanzaDiGioco.partibile());
		if (istanzaDiGioco.partibile()) {
			istanzaDiGioco.aggiornaTutto();
			istanzaDiGioco.repaint();
		}
	}

	public static void main (String[] arg) {
		Game test = new Game();
	}	
}
alvise_91 è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2008, 16:04   #2
alvise_91
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 4
dai raga x favore qualche aiuto??
alvise_91 è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2008, 18:04   #3
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
eh, ma sto codice é troppo lungo figliuolo ^^
ho capito che é Natale ma nessuno é cosi tanto buono da mettersi a fare il debug di quell'affarone : D

non ho letto il codice ma posso darti qualche indicazione mooolto generale:

1) controlla lo standard error: puó darsi che il programma ti abbia lanciato qualche eccezione che non hai visto, e quindi un thread del programma é crashato mentre gli altri, pur potendo continuare a lavorare, sono rimasti fermi in attesa di qualcosa che doveva fare il primo.

2) se non ci sono eccezioni é probabile che tu sia vittima di un deadlock: usa un debugger per vedere, dei threads che girano, quali sono in attesa su qualche oggetto, e cerca di capire se un sottoinsieme di essi formano un ciclo di attese. se non sai cos'é un deadlock se vuoi ti spiego.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2008, 18:12   #4
alvise_91
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 4
si grazie degli aiuti. il primo lo escludo perchè gestisco tutte le eccezzioni. comunque si se puoi spiegami perchè io per "debug" uso solo il compilatore di JAVA lanciato da JCreator =) tutto a mano.. e siccome del multy-threading non so tanto (anzi praticamente nulla se non le basi) mi saresti di grande aiuto.

cmq volevo specificare che il programma non si blocca, continua a girare come 'ignorando' il metodi del file MermoRally.java.

comunque capisco benissimo che sia lungo.. mi ci perdo pure io a volte..
alvise_91 è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2008, 22:39   #5
alvise_91
Junior Member
 
Iscritto dal: Dec 2008
Messaggi: 4
comunque ci tengo a precisare che non riusciendo a risolvere il problema l'ho aggirato. ovvero o creato un file *.bat che lancio da dentro "Game.Java". arrivato a quando devo far partire la nuova classe "MemoRally.java" salvo i dati occorrenti su un file temporaneo, chiamo l'esecuzione del bat e faccio un

Codice:
System.exit(0);
nel bat poi metto un ritardo di mezzo secondo (per far in modo che SICURAMENTE l'applicazione java venga chiusa e poi avvio subito la classe MemoRally.java =)
alvise_91 è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2008, 23:40   #6
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da alvise_91 Guarda i messaggi
si grazie degli aiuti. il primo lo escludo perchè gestisco tutte le eccezzioni.
anche quelle unchecked? le eccezioni unchecked in genere non vanno gestite, ma vanno lasciate propagare perché indicano per definizione un bug del programma.


Quote:
comunque si se puoi spiegami perchè io per "debug" uso solo il compilatore di JAVA lanciato da JCreator =) tutto a mano.. e siccome del multy-threading non so tanto (anzi praticamente nulla se non le basi) mi saresti di grande aiuto.
un deadlock, anche detto attesa circolare, é una condizione in cui N threads attendono su altrettante risorse di sincronizzazione (oggetti nel caso di Java) senza la possibilitá che l'attesa termini; ció si verifica quando le attese sono circolari.

mi spiego meglio, numeriamo i threads da 1 a N e gli oggetti da 1 a N dando loro lo stesso numero dei thread che li hanno bloccati in un determinato momento: il thread 1 ha bloccato l'oggetto (la risorsa di sincronizzazione) 1, il thread 2 ha bloccato l'oggetto 2, e cosi via. ora mettiamo peró che il thread 1 voglia bloccare anche l'oggetto 2, il thread 2 l'oggetto 3, il thread 3 l'oggetto 4, e cosi via fino al thread N che vuole bloccare l'oggetto 1; quello che accade naturalmente é che nessuna attesa viene soddisfatta e gli N thread rimangono tutti bloccati.

nel caso piu semplice i thread in deadlock sono solo 2, quindi N = 2: ci sono due thread e due oggetti, l'oggetto 1 bloccato dal thread 1 e il 2 bloccato dal 2, ed il thread 1 attende sull'oggetto 2 mentre il thread 2 attende sull'oggetto 1; i due thread si bloccano.

questa situazione si chiama deadlock; ora devi vedere se c'entra qualcosa con quanto si verifica nel tuo programma. parlando in termini meno teorici "attendere su un oggetto" significa chiamare il metodo Object.wait(), mentre "bloccarlo" significa che l'attesa é terminata, il metodo wait ha finito la sua esecuzione e il monitor dell'oggetto appartiene al thread che ha chiamato wait.

qui c'é la documentazione della classe Object e dei suoi metodi di sincronizzazione, se ancora non hai avuto occasione di vederla:
http://java.sun.com/javase/6/docs/ap...ng/Object.html

anche se il tuo programma non funziona per tutt'altre ragioni, queste nozioni ti saranno comunque molto utili (si tratta di cose importanti).

ad ogni modo ribadisco il consiglio di usare un debugger: con quello puoi individuare molto facilmente un eventuale deadlock. non conosco JCreator perché uso tutt'altro, quindi non so darti indicazioni in merito.
fero86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
iPhone 18 Pro, alcuni utenti segnalano s...
Android Auto: Gemini ascolta la domanda ...
OpenAI avvisa oltre 100 organizzazioni p...
Dall'AI alla SI: il rebranding di Trump ...
0patch offrirà supporto esteso pe...
Sudo sembra un iPod, ma nasconde una car...
Meta, OpenAI e Google rifanno OpenClaw: ...
Pixel 10a: Google alza il prezzo di 100 ...
5 sconti TOP e una super city e-bike per...
Speciale Sonoff per utenti Prime: 4 valv...
Meno ghiaccio, meno acqua: il dato che c...
SBS annuncia il lancio degli accessori P...
Speciale Smart TV 65 e 75 pollici in off...
GL.iNet Beryl 7 a 107,19€: router Wi-Fi ...
Il plasma di un reattore a fusione ripre...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:06.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v