Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JME中的线程不';行不通_Java_Multithreading_Sockets_Jmonkeyengine - Fatal编程技术网

Java JME中的线程不';行不通

Java JME中的线程不';行不通,java,multithreading,sockets,jmonkeyengine,Java,Multithreading,Sockets,Jmonkeyengine,在JME中,我尝试使用线程,但当我运行程序时,函数从未启动 我有一个服务器套接字,正在侦听来自Netbeans的输入 听众 while (isRunning) { //Reads and prints the input String receivedString = (String) in.readObject(); System.out.println(receivedString); Str

在JME中,我尝试使用线程,但当我运行程序时,函数从未启动

我有一个服务器套接字,正在侦听来自Netbeans的输入

听众

while (isRunning) {
            //Reads and prints the input
            String receivedString = (String) in.readObject();

            System.out.println(receivedString);

            String[] parts = receivedString.split(";");

            if(parts[0].equals("craneCon"))
            {
                final int containerId = Integer.parseInt(parts[1]);
                m.enqueue(new Callable<Spatial>(){
                    public Spatial call() throws Exception{                        
                        m.removeContainersFromMaritime(containerId);
                        return null;
                    }
                });
            }

连接正常,但该方法从未执行。如何修复此问题?

我可能遗漏了一些内容,但m.enqueue(…)中的“m”是什么? 我猜这是某种执行服务,这可能是问题所在

您可以尝试:

new Thread() {public void run()
{
    m.removeContainersFromMaritime(containerId);
}}.start();

它至少会向您显示问题是否来自作为执行者的“m”。

jMonkeyEngine使用swing样式的线程模型,其中只有一个渲染线程完成所有工作。对场景图的任何更改都必须从该渲染线程执行

要进入渲染线程,您可以实现
AppStates
控件
,或者您可以
排队
可调用
,然后在渲染线程上以类似于Swing的
调用器
的方式执行

您发布的代码片段看起来是正确的,因此假设m是您正在运行的jME3 SimpleApplication,那么m.enqueue()将导致下次在渲染循环中(即在下一帧的开始处)执行排队的可调用代码

如果您没有看到它被执行,那么:

  • 你的应用程序没有运行
  • 您创建了多个应用程序,并将其排入错误的应用程序队列
  • 代码实际上正在运行,而您只是认为它没有运行

  • 在调试器中单步执行代码和/或添加调试语句(例如,
    removeContainersFromMaritime
    中的断点以查看是否实际调用了它,应该允许您缩小范围。

    未执行哪个方法?m.enqueue是什么?removeContainersFromMaritime方法。main不是静态的,因此我将对象main m=new main();调用方法。使用此示例@M.Jacobs:您是否调用了M上的“start()”方法?如果这对您没有意义,请尝试下面的建议!编辑:您只能启动一个应用程序,就像我尝试在线程[LWJGL Rederer Thread,5,main]中引发此错误一样:未捕获异常IllegalStateException;未正确更新场景图以进行渲染。状态在rootNode.updateGeometricState()之后更改调用。确保不要从另一个线程修改场景!问题空间名称:Null我不想在main中使用simpleUpdate方法来更新屏幕,因为我想从侦听器调用方法,以便屏幕由它们更新。现在是主要问题,我不知道如何做。该方法在main中,这就是我为什么请看我的答案,我也会回答:)我需要对这一点进行更多的澄清1.除了呈现线程外,jmonkey中还有哪些其他线程。2.是否有单个线程,如果线程阻塞,输入如何工作?3.哪个线程负责通知各个侦听器有关事件的信息etc@simar1.您创建的所有线程。JME3只使用一个。2.如果您阻止线程,则不会使用如果一切都停止了,不要阻塞线程。(例如,如果某个线程会阻塞该线程,那么将其转移到另一个线程,然后将结果排队返回到渲染线程是一件好事。)3.取决于您的意思,但这听起来也像渲染线程。当我收到nifty onClick()的回调时,哪个线程是方法?假设我实现了我的一个AppState作为控制器,当我收到回调时,我在那里进行大量计算。我的输入事件会发生什么?它们会丢失还是只是在某处排队?你能给我指一下jmonkey代码,在那里我可以看到render的更新循环吗thread@simarNifty也在render threa上运行d、 您最好将问题收集在一起,并将其作为新问题发布,这确实是一个错误的位置。发布新问题后,请随时在此处发布新问题的链接。还有一个问题
    new Thread() {public void run()
    {
        m.removeContainersFromMaritime(containerId);
    }}.start();