Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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 使用线程交互更改eclipse中的标签图标_Java_Multithreading_Eclipse_Icons_Jlabel - Fatal编程技术网

Java 使用线程交互更改eclipse中的标签图标

Java 使用线程交互更改eclipse中的标签图标,java,multithreading,eclipse,icons,jlabel,Java,Multithreading,Eclipse,Icons,Jlabel,我目前正在开发一个交互式UI,它可以显示您是否打开了温室系统的水或照明组件 当从另一个窗口单击一个按钮,将其标志值传递给一个线程类,从而使图标发生变化时,我面临着很大的挑战 控制器->线程逻辑->新闻IM 下面是我在UI窗口中使用的一些示例测试代码 我还是一个初学者,所以我使用eclipse自动生成的代码 粘贴代码似乎有问题 这是我用来修改标志值的测试代码片段 ThreadLogic while(!t.interrupted()){ sim = new NewSim()

我目前正在开发一个交互式UI,它可以显示您是否打开了温室系统的水或照明组件

当从另一个窗口单击一个按钮,将其标志值传递给一个线程类,从而使图标发生变化时,我面临着很大的挑战

控制器->线程逻辑->新闻IM

下面是我在UI窗口中使用的一些示例测试代码 我还是一个初学者,所以我使用eclipse自动生成的代码

粘贴代码似乎有问题

这是我用来修改标志值的测试代码片段

ThreadLogic

while(!t.interrupted()){

            sim = new NewSim();
            try {
                sim.setLightStatus(1);
                System.out.println("flag is 1");
                t.sleep(5000);

                sim.setLightStatus(0);
                System.out.println("flag is 0");
                t.sleep(5000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


    }
NewSim
在Swing中,除了事件调度线程(EDT),您不能在任何其他线程中创建或修改Swing组件

因此,应在EDT中执行以下行:

sim = new NewSim();
sim.setLightStatus(1);
sim.setLightStatus(0);
使用SwingUtilities.invokeLater()在EDT而不是当前(非EDT)线程中执行一些代码。并阅读所有swing组件的Javadoc中的警告:

sim = new NewSim();
sim.setLightStatus(1);
sim.setLightStatus(0);