Salve a tuttisto cominciando a lavorare questi giorni con i Thread e ancora devo prenderci la mano
![]()
Veniamo al dunque: il programma dovrebbe, dopo aver premuto Start, far partire un countdown e nel mentre c'è la possibilità di cambiare colore allo sfondo premendo un bottone Colore. Inoltre volevo implementare la possibilità di mettere in Pausa il countdown e farlo riprendere alla seconda pressione di Pausa (con un If e un boolean dovrei cavarmela).
Ora le domande sono due...
- dal codice che ho scritto riscontro un problema nel pulsante pausa (che in questa prova blocca il Thread e non lo mette in pausa) ossia che non ferma il thread![]()
- e inoltre come si mette in pausa un thread?in questo caso devo anche poter riprendere lo stesso Thread...e se si preme su Start con la pausa attiva non deve creare nulla (un boolean risolverà il tutto
)
Grazie in anticipocodice:import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Countdown extends JPanel implements Runnable{ private Thread th; private JLabel p; private boolean partito=false; private boolean pausa; public Countdown(){ setBackground(Color.white); setPreferredSize(new Dimension(500,200)); JFrame f = new JFrame("Countdown"); p = new JLabel("Contiamo...."); add(p); f.setLayout(new BorderLayout()); JPanel t = new JPanel(); t.setPreferredSize(new Dimension (500,100)); t.setBackground(Color.red); JButton bottonestart = new JButton("Start"); ActionListener listenstart = new ActionListener(){ public void actionPerformed(ActionEvent ae){ if(!partito){ start(); System.out.println("è partito il countdown..."); partito=true; } } }; bottonestart.addActionListener(listenstart); t.add(bottonestart); JButton bottonepausa = new JButton("Pausa"); ActionListener listenpausa = new ActionListener(){ public void actionPerformed(ActionEvent ae){ if(partito){ stop(); } partito=false; } }; bottonepausa.addActionListener(listenpausa); t.add(bottonepausa); JButton bottonecolore = new JButton("Colore"); ActionListener listencolore = new ActionListener(){ public void actionPerformed(ActionEvent ae){ //cambio colore del pannello Color colore = new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255)); setBackground(colore); } }; bottonecolore.addActionListener(listencolore); t.add(bottonecolore); f.add(this, BorderLayout.CENTER); f.add(t, BorderLayout.SOUTH); f.pack(); f.setVisible(true); f.setResizable(false); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void stop(){ System.out.println("Stai bloccando il thread"+th); th = null; } public boolean isRunning(){ return th != null; } public void start(){ if(!isRunning()){ th = new Thread(this); System.out.println("Sta partendo il thread"+th); th.start(); } } public void run(){ while(isRunning()){ // se il thread Ë partito for(int i=10; i >= 0; i --){ p.setText("siamo al numero .... "+i); try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } } p.setText("Il countdown del thread "+th+" è finito :D"); partito=false; stop(); } } public static void main(String[] args) { new Countdown(); } }![]()

sto cominciando a lavorare questi giorni con i Thread e ancora devo prenderci la mano
)
Rispondi quotando