webbrowser(windows)中的IllegalThreadStateException

时间:2012-11-12 10:23:51

标签: java applet

我收到了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新手,这是我的第一个小程序。我知道我做错了什么,但我找不到它是什么。

编辑:从控制台

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

1 个答案:

答案 0 :(得分:0)

 _connectionThread = ConnectionThread.getInstance();

看起来像ConnectionThread是一个Singleton(是真的吗?)并扩展了Thread。如果这是正确的,您可能会遇到问题,因为线程只能启动一次(Thread.start())。如果您尝试第二次启动相同的Thread实例,它将失败并显示java.lang.IllegalThreadStateException

要解决此问题,请在每个请求上创建一个新的Thread对象,或者在单一内容中缓存执行结果。如何准确实现这取决于您希望通过线程和应用程序的设计实现的目标。