I've got a simple SWT Browser, and a TimerTask class. By clicking a Button in the Browser class I want to schedule a TimerTask which executes javascript on the Browser, but when the Timer delay runs out, I get following error:
Exception in thread "Timer-0" org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:3563)
at org.eclipse.swt.SWT.error(SWT.java:3481)
at org.eclipse.swt.SWT.error(SWT.java:3452)
at org.eclipse.swt.widgets.Widget.error(Widget.java:432)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:326)
at org.eclipse.swt.browser.Browser.execute(Browser.java:388)
at timerLogin.run(timerLogin.java:9)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Here my Classes:
import java.util.Timer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class SWTBrowser {
static Display display;
static Shell shell;
public static Browser browser;
public static void main(String[] args) {
display = new Display();
shell = new Shell(display);
final Timer timer = new Timer();
shell.setText("Browser Example");
shell.setSize(620, 500);
ToolBar toolbar = new ToolBar(shell, SWT.NONE);
toolbar.setBounds(5, 5, 200, 30);
ToolItem goButton = new ToolItem(toolbar, SWT.PUSH);
goButton.setText("Go");
browser = new Browser(shell, SWT.NONE);
browser.setBounds(5, 75, 600, 400);
Listener listener = new Listener() {
public void handleEvent(Event event) {
ToolItem item = (ToolItem) event.widget;
String string = item.getText();
if (string.equals("Go"))
timer.schedule(new TimerLogin(), 2000);
}
};
goButton.addListener(SWT.Selection, listener);
shell.open();
browser.setUrl("http://www.google.de");
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
import java.util.TimerTask;
public class TimerLogin extends TimerTask {
@Override
public void run() {
SWTBrowser.browser.execute("alert('http://www.alternate.de')");
System.out.println("Executed");
}
}
Any solution for this?
Greetings :)