Ok ho provato a costruire delle classi di esempio per gestire il threading in Swing, in questo codice premendo un bottone, scambio le icone di due JLabel e ad operazione effettutata aspetto due secondi.Posto le classi create:
Il risultato è quello che mi aspetto, volevo sapere se sto facendo il tutto in modo correttocodice:public class Finestra { static JLabel icona,altraIcona; public static void main(String args[]) { JFrame frame = new JFrame("Prova Thread"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton button=new JButton("Inverti"); icona=new JLabel(new ImageIcon("../2c.png")); altraIcona=new JLabel(new ImageIcon("../img.png")); button.addMouseListener(new Ascoltatore()); Container c=frame.getContentPane(); JPanel p=new JPanel(); c.add(p); p.add(icona); p.add(button); p.add(altraIcona); frame.setSize(500,500); frame.setVisible(true); } } public class Ascoltatore implements MouseListener { public void mouseClicked(MouseEvent e) { System.out.print("\nBottone cliccato"); new Thread(new Esecutore()).start(); } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mousePressed(MouseEvent e){} } public class Esecutore implements Runnable { public void run() { try { EventQueue.invokeAndWait(new Inverti()); Thread.sleep(2000); System.out.print("\nOk fatto"); } catch (InterruptedException e) { e.printStackTrace(); } catch(InvocationTargetException e) { e.printStackTrace(); } } } public class Inverti implements Runnable { public void run() { Icon tmp=Finestra.icona.getIcon(); Finestra.icona.setIcon(Finestra.altraIcona.getIcon()); Finestra.altraIcona.setIcon(tmp); } }![]()

Rispondi quotando