Не могу остановить поток На полпути и Перезапустить Добавить нить узла.
Это то, что я получаю
Это то, что мне нужно Я хочу что-то подобное снова и снова, когда нажимаю Кнопка обновления
чистый экран и Перезагрузка (например, от A до N В правильном порядке)
Почему? Так что я могу выбрать другой список перед обновлением.
Назад История (игнорировать) Я работаю надмаленький проект на JavaFX уже месяц, но эта проблема меня беспокоит.Я сделал свое исследование и пытаюсь понять это, но ничего.Я очень признателен, если кто-то направит меня на правильный путь.Пожалуйста, выделите этот вопрос, чтобы другим не пришлось тратить так много времени
У меня есть JavaFX Controller
@FXML public FlowPane flow_panel;
MyPlatform mp = new MyPlatform(); // A class that implements Runnable
Thread t;
boolean first_time_click = true; // To check Whether i clicked '1st' time or 'second' time
@FXML
private void Refresh_Btn(ActionEvent event)
{
System.out.println("Refresh btn");
t = new Thread(mp); //Creating Thread object
if(first_time_click == true) { first_time_click = false;
MyPlatform.stop = false; //Thread object.Stop, When false do nothing
flow_panel.getChildren().clear(); // cleaning screen
System.out.println("Start Thread");
t.setDaemon(true);
t.start(); //Start Thread
} else if(first_time_click == false){ first_time_click = true;
MyPlatform.stop = true; //Exist loop
t.interrupt(); // I thought 't.interrupt()' it work but nothing
System.out.println("Stop Thread");
flow_panel.getChildren().clear(); // cleaning screen
MyPlatform.stop = false; //Thread object.Stop, When false do nothing
t.setDaemon(true);
t.start(); //Start Thread
System.out.println("Stoped Thread Started again");
}
}
Затем у меня есть класс с именем MyPlatform, который реализует Runnable
import javafx.application.Platform;
import javafx.scene.control.Button;
import setups.WindowSetupConfig;
public class MyPlatform implements Runnable
{
public static boolean stop = false;
@Override
public void run()
{
for (String name : ListOfNames.getlist())
{
if(stop) // Exit for loop if true
{
break;
}
Platform.runLater(new Runnable()
{
@Override
public void run()
{
Button btn = new Button("Button : "+name);
System.out.println(name);
//Adding that button to FlowPane
WindowSetupConfig.getController().flow_panel.getChildren().add(btn);
}
});
try {
Thread.sleep(1000); // Wait for 1 sec, Controlling speed
} catch (InterruptedException e) { // try catch it needed for some reason
e.printStackTrace();
}
}
}
}
У меня есть список строк.Изначально этот список содержал бы более 500 имен
import java.util.ArrayList;
public class ListOfNames
{
private static ArrayList<String> list_of_names ;
public ListOfNames()
{
list_of_names = new ArrayList<>();
list_of_names.add("A");
list_of_names.add("B");
list_of_names.add("C");
list_of_names.add("D");
list_of_names.add("E");
list_of_names.add("F");
list_of_names.add("G");
list_of_names.add("H");
list_of_names.add("I");
list_of_names.add("J");
list_of_names.add("K");
list_of_names.add("L");
list_of_names.add("M");
list_of_names.add("N");
}
public static ArrayList<String> getlist() {
return list_of_names;
}
}
Всякий раз, когда я нажимаю кнопку Обновить я хочу остановить поток на полпути добавления кивков впанель потока.
Очистите FlowPane с помощью flow_panel.getChildren (). Clear (); и перезапустите с начала списка
Bacially -Stop -Clean -Restart
Если есть какой-нибудь способ сделать это с Service или task , это было бы здорово