IllegalThreadStateException

IllegalThreadStateException

我收到一个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对象,或在单例中缓存执行结果。如何精确实现取决于您希望通过线程和应用程序设计实现的目标。

10-08 09:21