Я новичок с 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 не в этом дело.
Надеюсь, теперь мне понятнее. Что бы уточнить - этот код отлично работает на первой итерации. Мой вопрос касается выполнения второй и третьей итераций.
Заранее спасибо!