线程计数在Java GUI中的使用



所以在这段代码中,我想告诉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)似乎从来没有被调用过?这难道不是我为了实现我的目标而想要做的吗?提前感谢您的任何意见!

当您运行Java程序时,有许多线程正在运行(例如,主线程:),看看这里),如果您想检查线程的状态,请使用getState()方法(只是要记住将线程分配给Thread变量:

        Thread t = new Thread(new Runnable() 
        {
            public void run() 
            {
                FileConverter fc = new FileConverter();
            }
         });
        t.start();
        if (t.getState().equals(Thread.State.TERMINATED) ) { ... }

查看更多关于您的问题,您可以调用join方法,因为它将阻塞当前线程,直到t完成(或直到超时)。

这是关于Swing中的并发性,最好是将你的后台任务包装到SwingWorker中,@Hovercraft Full Of Eels非常好的例子,或者通过这里的implements Executor

相关内容

  • 没有找到相关文章

最新更新