gemouzhi(gemouzhi),我碰到了异常是:
org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:2691)
at org.eclipse.swt.SWT.error(SWT.java:2616)
at org.eclipse.swt.SWT.error(SWT.java:2587)
at org.eclipse.swt.widgets.Widget.error(Widget.java:381)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:284)
at org.eclipse.swt.widgets.Button.setText(Button.java:602)
at test.Run.run(Run.java:16)
我觉得这个应该是线程异常,现在问题解决了,理解不太深,好像是这样的:
public Outputer out = null;
Object o = new Object();
....
....
....
Button bRun = new Button(shell,SWT.NONE);
registerCallback(bRun, SWT.Selection, this, "doRun");
....
....
....
public void doRun(Event event) {
bRun.setEnabled(false);
// start a new thread to wait
new Thread(new Runnable() {
public void run() {
try {
synchronized (o) {
o.wait();
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
display.asyncExec(new Runnable() {
public void run() {
bRun.setEnabled(true);
}
});
}
}).start();
// start outputer processor
new Outputer(o);
}
}
public class Outputer extends Thread
{
String COMMAND = null;
String line;
Process p = null;
Object o = null;
public Outputer(Object o)
{
this.o = o;
start();
}
public void run()
{
//你要作的事情
SomethingYouWantToDo();
谢谢楼上的几位
pdvv(我爱花猫)和lh8748(LH)的方法我都试过了,swing和awt都是没问题的,但是swt在另一个线程里操作控件的时候会抛异常:
org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:2691)
at org.eclipse.swt.SWT.error(SWT.java:2616)
at org.eclipse.swt.SWT.error(SWT.java:2587)
at org.eclipse.swt.widgets.Widget.error(Widget.java:381)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:284)
at org.eclipse.swt.widgets.Button.setText(Button.java:602)
at test.Run.run(Run.java:16)
你自己的线程需要这样:
public class ThreadTimer extends Thread {
public final int STATE_STOPPED = 0;
public final int STATE_RUNNING = 1;
public final int STATE_WAITTING = 2;
private int timerState = STATE_STOPPED;
private boolean bRunning = false;
public void run(){
bRunning = true;
while(bRunning){