Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    142

    [JAVA]Problema con i Thread

    Salve ragazzi io ho queste due classi...il problema è che il thread non stampa nulla sulla jtextfield ecco le classi:

    codice:
    public class Estrazioni extends Thread{
    	private int ritardo,numeroestratto;
    	Estrazioni(int ritardo,int numeroestratto){
    		super();
    		this.ritardo=ritardo;
    		this.numeroestratto=numeroestratto;
    	}
    	public void run(){
    		int tentativi=0,numeroestratto2=0;
    		InterfacciaGrafica ig = new InterfacciaGrafica();
    	    while(numeroestratto2!=numeroestratto){
    	    	try{
    	    		sleep(ritardo);
    	    		numeroestratto2 = (int) Math.random()*20;
    	    		tentativi++;
    	    		ig.insntent.setText(""+tentativi);
    	    		ig.insnestr.setText(""+numeroestratto2);
    	    		ig.insnvinc.setText(""+numeroestratto);
    	    	}catch(Exception e){
    	    	}
    	    }
    	}
    }
    codice:
    import java.awt.*;
    
    import javax.swing.*;
    public class InterfacciaGrafica extends JFrame{
    	private JPanel pannello;
    	public JTextField insnvinc,insnestr,insntent;
    	InterfacciaGrafica(){
    	}
    	InterfacciaGrafica(String titolo){
    		super(titolo);
    		setSize(400,400);
    		setLayout(null);
    		pannello = new JPanel();
    		pannello.setLayout(null);
    		pannello.setBackground(Color.white);
    		pannello.setSize(400,400);
    		getContentPane().add(pannello);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setResizable(true);
    		JLabel numerovincente = new JLabel("Numero vincente");
    		numerovincente.setBounds(20, 30, 170, 60);
    		numerovincente.setFont(new Font("",Font.ITALIC,20));
    		pannello.add(numerovincente);
    		JLabel numeroestratto = new JLabel("Numero estratto");
    		numeroestratto.setBounds(20, 100, 170, 60);
    		numeroestratto.setFont(new Font("",Font.ITALIC,20));
    		pannello.add(numeroestratto);
    		JLabel numerotentativi = new JLabel("N tentativi");
    		numerotentativi.setBounds(20, 160, 170, 60);
    		numerotentativi.setFont(new Font("",Font.ITALIC,20));
    		pannello.add(numerotentativi);
    		insnvinc = new JTextField();
    		insnestr = new JTextField();
    		insntent = new JTextField();
    		insnvinc.setEditable(false);
    		insnestr.setEditable(false);
    		insntent.setEditable(false);
    		insnvinc.setBounds(240, 30, 90, 60);
    		insnvinc.setFont(new Font("",Font.ITALIC,20));
    		pannello.add(insnvinc);
    		insnestr.setBounds(240, 100, 90, 60);
    		insnestr.setFont(new Font("",Font.ITALIC,20));
    		pannello.add(insnestr);
    		insntent.setBounds(240, 160, 90, 60);
    		insntent.setFont(new Font("",Font.ITALIC,20));
    		pannello.add(insntent);
    		Estrazioni e = new Estrazioni(200,(int)Math.random()*20);
    		e.start();
    		setResizable(false);
    		setVisible(true);
    	}
    	public void paint(Graphics g){
    		super.paint(g);
    		g.drawLine(200, 450, 200, 0);
    	}
    	public static void main(String[] args) {
    		InterfacciaGrafica ig = new InterfacciaGrafica("Estrazione Lotto");
    	}
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    142
    nessuno che mi possa aiutare?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    A parte che ci sarebbero un po' di questioni tecniche che non vanno affatto bene nel tuo codice. Ma a parte quello c'è una questione concettuale che non solo non è chiara ma è proprio quella che porta a "non vedere nulla".

    Tu fai partire il main(), no? Nel main istanzi un InterfacciaGrafica nel cui costruttore crei i vari componenti e istanzi il thread Estrazioni che fai partire. Ma nel run() del thread vai ad istanziare un altro nuovo InterfacciaGrafica e oltretutto con l'altro costruttore vuoto che non fa nulla e non crea alcun componente. Quindi il thread opera su un frame "vuoto" che non ha nulla.

    E tra l'altro, non avendo nulla, quei campi insntent ecc... sono a null, quindi invocare ig.insntent.setText(...) ti causa un bel NullPointerException.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.