所以在这段代码中,我想告诉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