如何为jframe实现多线程

时间:2011-03-26 06:59:19

标签: java multithreading

我正在使用此代码实现多线程:

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();但是,我没有获得所需的多线程效果。仅显示框架,而不显示无生命进度条。请注意,当用作单个线程时,会显示进度条;

这里必须做些什么?请帮忙,先谢谢

1 个答案:

答案 0 :(得分:2)

这是完全错误的。 Swing是单线程的。与swing组件的每次交互都必须在单个事件调度线程中完成。仔细阅读this tutorial。它解释了在处理多个线程时必须完成的工作。另请阅读this tutorial on progress bars and progress monitors