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