Hola a todos,
Estoy empezando con java y lo que a simple vista parece muy sencillo no hay manera de hacerlo, se trata de un simple ejemplo, lo que quiero hacer es que cuando pulse el botón se actualice el valor del campo de 0 a 100000 pero sin que bloque la interface y pueda ver como se actualiza hasta acabar la tarea.
El caso es que recibo el error "Invalid thread access" y si trato de usar "Display.getDefault().asyncExec..." se bloquea la interface hasta que finaliza.
Alguna sugerencia ante mi dilema?
Gracias
Código:
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
public class Example
{
protected Shell shell;
private Text text;
static int count = 0;
public static void main(String[] args)
{
try
{
Example window = new Example();
window.open();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void open()
{
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while(!shell.isDisposed())
{
if(!display.readAndDispatch())
{
display.sleep();
}
}
}
protected void createContents()
{
shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
text = new Text(shell, SWT.BORDER);
text.setBounds(10, 10, 76, 21);
Button btnNewButton = new Button(shell, SWT.NONE);
btnNewButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
Thread newThread = new Thread(new Runnable()
{
@Override
public void run()
{
for(int i = 0; i < 100000; ++i)
{
text.setText(count + "");
++count;
}
}
});
newThread.start();
}
});
btnNewButton.setBounds(94, 10, 75, 25);
btnNewButton.setText("New Button");
}
}