Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-12-2008, 13: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, 17: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, 19: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, 19: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, 23: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 24-12-2008, 00: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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Il nucleo della cometa interstellare 3I/...
La Russia potrebbe sviluppare un'arma pe...
Manda la RAM Corsair in assistenza, rice...
ASUS ROG G1000 con 'AniMe Holo': saranno...
Un test di longevità ha messo alla prova...
Incat inizia i test dell'incredibile tra...
LG Sound Suite: al CES il sistema audio ...
Avengers Doomsday, il primo trailer &egr...
La crisi delle memorie non farà sconti a...
Il trailer più atteso dell'anno &...
I gamer vogliono i monitor OLED: sopratt...
Samsung alza l’asticella dei televisori ...
Energie rinnovabili 2025: quasi 42% del ...
Le auto elettriche volano in tutta Europ...
Nuovo look per la finestra Esegui su Win...
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: 23:46.


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