在Java GUI中使用线程计数

时间:2011-08-02 22:03:29

标签: java multithreading user-interface events

所以在我的这部分代码中,我想基本上告诉GUI禁用按钮并在没有线程运行时弹出一个弹出窗口(即调用的方法已经完成)。

public void actionPerformed(ActionEvent event) 
{
    String command = event.getActionCommand();

    //If btnConvertDocuments is clicked, the FileConverter method is called and the button is then disabled [so as to prevent duplicates].
    if (command.equals("w"))
    {
        new Thread(new Runnable() 
        {
            public void run() 
            {
                FileConverter fc = new FileConverter();

            }
         }).start();
        if (Thread.activeCount() == 0)
        {
            btnConvertDocuments.setEnabled(false);
            //Validation message ensuring completion of the step.
            JOptionPane.showMessageDialog(this, "Step 1 Complete!", "Validation", JOptionPane.INFORMATION_MESSAGE);
        }
    }

为什么if (Thread.activeCount() == 0)似乎永远不会被调用?这不是我想要完成我的目标吗?提前感谢您的任何意见!

2 个答案:

答案 0 :(得分:2)

运行Java程序时运行的线程很多(例如,主线程:)并查看here)如果要检查线程的状态,请使用{{3}方法(只记得将线程分配给Thread变量:

        Thread t = new Thread(new Runnable() 
        {
            public void run() 
            {
                FileConverter fc = new FileConverter();

            }
         });
        t.start();
        if (t.getState().equals(Thread.State.TERMINATED) ) { ... }

仔细研究你的问题,你也可以调用getState()方法,因为它会阻塞当前线程直到t完成(或直到超时)。

答案 1 :(得分:2)

大约是Concurency in Swing,最好将BackGround任务包装到SwingWorker@Hovercraft Full Of Eels非常好的示例,或者通过implements Executor here < / p>