我对SWT中的线程总是搞不懂。最近在编一个程序的时候,用到了线程但是却出现问题。首先,建了一个线程对象t1,
它的作用就是实现类似打牌,两个轮流出牌,一个完了后,开启另一个出牌的标志。
如:
public void run(){
if(play)
{
}
if(diren){
}}
这个过程中比较顺利,没出现什么问题,接着我需要再加一个线程,就出现问题了。
我想在对方出牌这一块中,用另一个线程t2,去控制出牌的时间快慢或者其他。这时候应该怎么加进去。我是在if(diren){} 这一块里面,开启线程,t2.start(),然后在具体出牌里面就设了t2.stop。这样运行后,第一轮是没问题的,但第二轮就出现问题了。
抛出错误:
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.IllegalThreadStateException)
at org.eclipse.swt.SWT.error(SWT.java:3884)
at org.eclipse.swt.SWT.error(SWT.java:3799)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3885)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3506)
at 主窗口.open(主窗口.java:110)
at 主窗口.main(主窗口.java:95)
Caused by: java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at 主窗口.对方出牌阶段(主窗口.java:653)
at 主窗口.Runn(主窗口.java:538)
at 主窗口$11.run(主窗口.java:420)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
... 4 more有人能听懂我想讲什么么?
拜托了。。