Salve a tutti, ho un problema con la grafica, sto usando un plugin di java per usare Java SWT, il problema è il seguente:
Mi serve usare un countdown nel mio programma, cosi ho scritto un Runnable che lo fa, ed in più modifica una label con il valore di cui necessito, il tutto funziona(uso i metodi syncExec e asyncExec), ma quando avvio il countdown mi si "sputtana tutto" bloccandomi il programma fino a countdown ultimato, cosa può essere, vi lascio i codici delle mie classi.
Classe Clock:
package esercizio.countdown;
import java.util.concurrent.TimeUnit;
import org.eclipse.swt.widgets.Label;
public class Clock implements Runnable{
private int seconds;
private Label label;
public Clock(int sec, Label lab){
seconds=sec;
label=lab;
}
public int getSeconds(){
return seconds;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(seconds>0){
System.out.println(seconds);
label.setText(seconds+"");
try {
Thread.sleep(TimeUnit.SECONDS.toMillis(1));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
seconds--;
}
}
}
Classe Countdown:
package esercizio.countdown;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
public class Countdown {
protected Shell shell;
private Clock c;
private Label lab;
private int secondsWait=30;
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
try {
Countdown window = new Countdown();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
private void avviaCountDown(){
Display.getDefault().syncExec(c);
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
Label lblNewLabel = new Label(shell, SWT.NONE);
lblNewLabel.setFont(SWTResourceManager.getFont("Segoe UI", 28, SWT.NORMAL));
lblNewLabel.setBounds(48, 61, 209, 78);
lblNewLabel.setText("30");
lab=lblNewLabel;
c=new Clock(secondsWait,lblNewLabel);
Button btnProva = new Button(shell, SWT.NONE);
btnProva.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
avviaCountDown();
}
});
btnProva.setBounds(76, 157, 75, 25);
btnProva.setText("Prova");
}
}
tengo a precisare che il secondo codice, eccetto per le aggiunte tipo listener e del countdown è autogenerato dal plugin