我正在使用此代码实现多线程:
class Progress extends JFrame implements Runnable {
Thread t;
JProgressBar current;
JTextArea out;
JButton find;
Thread runner;
JFrame tframe;
int num = 0;
public Progress() {
t=new Thread(this,"Thread1");
t.start();
}
public void run()
{
tframe=new JFrame("Please wait");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel();
pane.setLayout(new FlowLayout());
current = new JProgressBar();
//current.setValue(0);
current.setStringPainted(true);
current.setIndeterminate(true);
pane.add(current);
setContentPane(pane);
tframe.add(pane);
tframe.pack();
tframe.setSize(300,100);
tframe.setResizable(false);
tframe.setAlwaysOnTop(true);
tframe.setLocation(300,300);
tframe.setVisible(true);
}
public void stop()
{
tframe.dispose();
}
当我需要启动线程时,我使用
Progress t=new Progress(); .
这显示框架,并停止使用t.stop();但是,我没有获得所需的多线程效果。仅显示框架,而不显示无生命进度条。请注意,当用作单个线程时,会显示进度条;
这里必须做些什么?请帮忙,先谢谢
答案 0 :(得分:2)
这是完全错误的。 Swing是单线程的。与swing组件的每次交互都必须在单个事件调度线程中完成。仔细阅读this tutorial。它解释了在处理多个线程时必须完成的工作。另请阅读this tutorial on progress bars and progress monitors。