所以在我的这部分代码中,我想基本上告诉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)
似乎永远不会被调用?这不是我想要完成我的目标吗?提前感谢您的任何意见!
答案 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>