Итак, я пытаюсь остановить один поток, когда у меня запущено несколько потоков, вот код, который я использую для инициализации потоков. В основном у меня есть несколько textFields в javafx, и когда кнопка нажимается на экране, он заполняет textFields, один за другим, с увеличивающимся таймером. Теперь у меня также есть кнопка для каждого из текстовых полей, чтобы очистить его, но проблема в том, что когда я очищаю его, потому что поток все еще работает, таймер исчезает на секунду и возвращается из-за строки 'orderTimes.get (boxNo ) .setText (минута + секунда); ' в коде.
Теперь я попытался создать список потоков и попытался реализовать его ниже, но он не работает, поэтому я могу вызывать каждый отдельный поток, если его кнопка нажата кнопка очистки.
Кто-нибудь знает, как я могу закрыть / остановить только один поток из нескольких запущенных? Если требуется дополнительная информация, просто дайте мне знать, спасибо.
public static void createIncrementingTimer(int boxNo, List<TextField> orderTimes) {
minutesList.set(boxNo, 0);
secondsList.set(boxNo, 0);
state = true;
new Thread(threadList.get(boxNo)) {
int currentMinutes = 0;
int currentSeconds = 0;
public void run() {
for (;;) {
if (state = true) {
try {
sleep(1000);
if (secondsList.get(boxNo) > 59) {
secondsList.set(boxNo, 0);
currentSeconds = 0;
minutesList.set(boxNo, currentMinutes + 1);
currentMinutes++;
}
if (secondsList.get(boxNo) < 10) {
second = ":0" + Integer.toString(secondsList.get(boxNo));
} else {
second = ":" + Integer.toString(secondsList.get(boxNo));
}
secondsList.set(boxNo, currentSeconds + 1);
currentSeconds++;
if (minutesList.get(boxNo) < 10) {
minute = "0" + Integer.toString(minutesList.get(boxNo));
} else {
minute = Integer.toString(minutesList.get(boxNo));
}
orderTimes.get(boxNo).setText(minute + second);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
};
threadList.get(boxNo).start();
}
Код, который я использую для очистки текстовых полей, приведен ниже, а orderTimes - это список текстовых полей, которые я пытаюсь очистить.
public static void eraseBox(int clickedButtonNumber, List<TextArea> orderContentsList, List<TextField> tableNumbers, List<TextField> orderNumbers, List<TextField> orderTimes) {
orderContentsList.get(clickedButtonNumber).setText(null);
tableNumbers.get(clickedButtonNumber).clear();
orderNumbers.get(clickedButtonNumber).clear();
orderTimes.get(clickedButtonNumber).clear();
}