Использование количества потоков в Java GUI - PullRequest
1 голос
/ 03 августа 2011

Итак, в этом разделе кода, который я имею, я хочу по существу сказать 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 ]

2 голосов
/ 03 августа 2011

это примерно Конкуренция в Swing , лучше бы обернуть вас заданием BackGroung для SwingWorker , очень хороший пример @ Hovercraft Full Of Eels или реализует Исполнитель здесь

2 голосов
/ 03 августа 2011

Есть много потоков, которые запускаются, когда вы запускаете программу на 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 (или до истечения времени ожидания).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...