Я знаю снова и снова, люди спрашивают, как начать поток после того, как он был остановлен, и все говорят, что не можете. Это не дубликат, потому что я не нашел решения проблемы.Как я могу начать тему снова?
private void runInBackground() {
new Thread(new Runnable() {
@Override
public void run() {
while (running) {
try {
checkPixel();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
@Override
public void nativeKeyPressed(NativeKeyEvent e) {
// TODO Auto-generated method stub
System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
if(NativeKeyEvent.getKeyText(e.getKeyCode()).equals("F9")){
stop();
}
else if(NativeKeyEvent.getKeyText(e.getKeyCode()).equals("F10")){
}
Так что в моем коде я слушаю глобальные ключевые события, используя JNativeHook. Я могу успешно остановить checkPixels()
с помощью клавиши F9, но я не понимаю, что я должен делать, используя F10, когда я снова запустил checkPixel()
.
checkPixel()
в основном проверяет изменение цвета пиксела
ОТВЕТИЛ Добавлен если заявление для моего состояния переменной running
и сохранить время цикла верно позволяет мне включить/выключить метод, сохраняя при этом нити открытой. Спасибо Jaboyc
private void runInBackground() {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if(running){
try {
checkPixel();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
Я не совсем понимаю, что ваш код пытается сделать, но почему вы не можете просто вызвать 'runInBackground()' еще раз? – Ray
Что делает метод 'stop()'? Вы должны изменить 'running' на true/false atomically –
Возможный дубликат [Как приостановить, а затем возобновить поток?] (Http://stackoverflow.com/questions/16758346/how-pause-and-then-resume-a -thread) (Я знаю, что вы сказали, что это не дубликат, но на самом деле это так. Необходимые функции уже запрошены) –