Как перезапустить поток в java Swing приложении - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок с Java Swing. Возможно, следующий вопрос будет глупым, но я пока не нашел для него хорошего решения.

У меня есть программа, которая включает в себя нить A и нить B. Нить A слушает клавиатуру, и она не ' не беспокоить меня вообще. Поток B что-то делает (скажем, он считает от 1 до некоторого int, который меньше миллиона), зависит от нажатой клавиши. Это может занять 10 секунд, 30 секунд, 2 минуты, я не знаю. То, что я хочу сделать - пока Нить Б заканчивает свою работу, я хочу перезапустить программу и снова начать прослушивание.

Я пытался какое-то время l oop с флагом, но в Swing это не сработало - оно просто входило в бесконечное число создаваемых потоков l * 1023.

Редактировать: Мой код выглядит примерно так:

public static void main(String[] args)
{
    threadOfProgram();
}

private static void threadOfProgram()
{
    EventQueue.invokeLater(new Runnable()
    {
        public void run()
        {
            try
            {
                Thread globalListenerThread = new Thread()
                {
                    public void run()
                    {
                        //listen to keyboard.
                    }
                };

                frameThread = new Thread()
                {
                    public void run()
                    {
                        try
                        {
                            //do something.
                        }   
                        } catch (Exception e)
                        {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                };

                globalListenerThread.start();
                frameThread.start();

                System.out.println("finished iteration.");
            } catch (Exception e)
            {
                e.printStackTrace();
            } finally
            {
            }
        }
    });
}

globalListenerThread = Thread A.

frameThread = Thread B.

, когда они оба работают, A слушает клавиатуру, и если пользователь нажимает на какую-то клавишу, поток B начинает работать и печатает некоторые вещи в кадре. После завершения печати я хочу, чтобы поток B перешел в go в том же состоянии, в котором он был раньше.

Я не совсем уверен, должен ли я перезапустить всю программу или только поток B, поскольку поток A не в этом дело.

Надеюсь, теперь мне понятнее. Что бы уточнить - этот код отлично работает на первой итерации. Мой вопрос касается выполнения второй и третьей итераций.

Заранее спасибо!

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