我想这样做: 主线程运行时, 我想执行一系列操作而不会干扰主线程并冻结swing组件,我可以强制停止从主线程执行。其中一个动作可以操纵摆动组件。
一些有助于想象的代码:
public class Test extends JFrame{
public Test()
{
super("Test");
JButton button = new JButton("Stop!");
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//STOP THE EXECUTION
}
});
this.add(button);
//START OF EXECUTION
System.out.println("FOO");
System.out.println("BAR");
button.setText("Hello");
System.out.println("THIS");
//END OF THE EXECUTION
this.pack();
this.setVisible(true);
}
}
我试图只使用Thread,它抛出异常,我忘记了异常是什么,但基本上它说我无法操纵非AWT线程中的swing组件或其他东西。
之后我尝试使用Thread和swingUtilities,但是他们在执行完成后执行swing组件操作。我该怎么做?
答案 0 :(得分:2)
Swing Workers methods publish(), process() and done()确保所有输出到Swing GUI的输出都将在EDT上完成
SwingWokrer
是WorkersThread and Swing
的实施,在执行过程中,Swing JComponent
和Mouse
Key Events
都可以访问/ LI>