【问题标题】:Use of Thread Count in Java GUIJava GUI 中线程数的使用
【发布时间】:2011-08-02 22:03:28
【问题描述】:

所以在这部分代码中,我想基本上告诉 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 multithreading user-interface events


【解决方案1】:

当你运行一个 Java 程序时,有很多线程在运行(例如,主线程 :) 并查看 here)如果你想检查一个线程的状态,使用 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 完成(或直到超时)。

【讨论】:

  • 那么在 getState() 方法的条件中,我到底要说什么?
  • 您将其与线程状态之一进行比较:download.oracle.com/javase/7/docs/api/java/lang/…
  • 那么会不会像...if (t1.getState().TERMINATED != null)...?
  • getState() 方法对我不起作用,但是,您提供的 join 方法似乎在起作用。非常感谢您的帮助!
【解决方案2】:

那是关于Concurency in Swing,最好将你的BackGroung任务包装到SwingWorker,@Hovercraft Full Of Eels的非常好的例子,或者通过实现Executorhere

【讨论】:

  • +1 这是我没有考虑到的(这是一个可怕的错误......)
  • 使用这个 executor 和我刚刚使用的 join 有什么区别?
  • @This 0ne Pr0grammer with Executor(s) 你可以玩多线程,但使用 SwingWorker 最重要的是你的 GUI 在 BackGround Task(s) 期间不会冻结,所有 JComponents 都是可访问的,但是另一方面,我必须说你也是可行的,但解决方法有点复杂,看这里stackoverflow.com/questions/6051755/…
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2021-12-11
相关资源
最近更新 更多