Salve a tutti, sto provando a creare una semplice interfaccia con un bottone e una label che viene modificata una volta premuto il bottone. Il problema per il quale mi rivolgo a voi e che non capisco perchè non mi aggiorna il text della label.
Sotto riporto tutte e due le classi in cui una ha il thread e l'altra lo richiama dall'interfaccia. Mi sapreste dire perchè non va?
Come potrete vedere nel codice riportato ho inserito nel ActionPerformed di getBtConnetti un ciclo while con loop infinito per simulare ciò di cui ho bisogno..cioè sfruttare la potenzialità del thread che si dovrebbe eseguire ed aggiornare la label a prescindere dal fatto che l'interfaccia sia impegnata in altro.
Ho realizzato tutto secondo questa filosofia:
L'interfaccia ha una funzione che richiama il thread tramite il metodo start e dall'altra parte il thread crea un'istanza dell'interfaccia e poi setta la label nel metodo run.
Sicuramente data la mia non conoscenza corretta dell'argomento avrò scritto qualche sciocchezza...mi sapreste dire come sistemare il tutto??
Spero che sia stato chiaro in ciò che sto facendo..eventualmente attendo domande per maggiori chiarimenti in merito al problema.
Grazie!
codice:import java.awt.*; import java.awt.event.ActionEvent; import javax.swing.*; /** * * @author matteosciortino */ public class FrameProva extends javax.swing.JFrame { private JButton btConnetti = null; public JLabel lbl2 = null; /** Creates new form FrameProva */ public FrameProva() { add(getBtConnetti(), null); lbl2 = new JLabel(); lbl2.setBounds(new Rectangle(15, 69, 106, 22)); lbl2.setText(" Attesa connessione..."); add(lbl2, null); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FrameProva().setVisible(true); } }); } private void Thread_label() { Listen listen = new Listen(this); listen.start(); } private JButton getBtConnetti() { if(btConnetti == null) { btConnetti = new JButton(); btConnetti.setText("Connetti al server..."); btConnetti.setLocation(new Point(164, 73)); btConnetti.setSize(new Dimension(139, 20)); btConnetti.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent ae) { int a = 0; while (a<10) { a = 3; Thread_label(); } } }); } return btConnetti; } } /------------------------------------------ class Listen extends Thread { private FrameProva frame; /** * Creates a new instance of Listen */ public Listen(FrameProva framee) { this.frame = framee; } public void run() { frame.lbl2.setText("Connessione avvenuta."); System.out.println("connesso al server... "); }}

Rispondi quotando
