我收到一个IllegalThreadStateException。
在Eclipse的调试器中一切正常,但是当我尝试在Firefox上对其进行测试时,它开始失败。刷新网页后,我得到了该异常,第一次运行就可以了。
这是代码:
public void init() {
try {
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
createGUI();
createConnection();
}
});
}
catch (Exception e)
{
System.err.println("createGUI didn't complete successfully");
e.printStackTrace();
System.err.println(e.toString());
}
}
private void createConnection()
{
_connectionThread = ConnectionThread.getInstance();
_connectionThread.setServer(getCodeBase().getHost());
_connectionThread.start(); <------ Exception
}
我是Java的新手,这是我的第一个applet。我知道我做错了什么,但是我找不到它是什么。
编辑:从控制台
java.lang.reflect.InvocationTargetException
at java.awt.EventQueue.invokeAndWait(Unknown Source)
at javax.swing.SwingUtilities.invokeAndWait(Unknown Source)
at com.onlinegame.gameclient.GameClient.init(GameClient.java:76)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at com.onlinegame.gameclient.GameClient.createConnection(GameClient.java:175)
at com.onlinegame.gameclient.GameClient.access$100(GameClient.java:34)
at com.onlinegame.gameclient.GameClient$1.run(GameClient.java:81)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
java.lang.reflect.InvocationTargetException
最佳答案
_connectionThread = ConnectionThread.getInstance();
看起来ConnectionThread是Singleton(是真的吗?)并扩展了Thread。如果这是正确的,那么您可能会遇到问题,因为线程只能启动一次(Thread.start())。如果您尝试第二次启动同一线程实例,它将失败并显示
java.lang.IllegalThreadStateException
。要解决此问题,请在每个请求上创建一个新的Thread对象,或在单例中缓存执行结果。如何精确实现取决于您希望通过线程和应用程序设计实现的目标。