我陷入了这个问题。我必须可视化Java中的选择排序算法,因此决定将JavaFX用于UI。在我的代码中,我有数字数组和按钮数组。我使用按钮来逐步查看数字数组的输出。但是,只有在所有循环过程结束时,我才会获得输出结果。我想这样做,例如:https://algorithm-visualizer.org/brute-force/selection-sort
我进行了搜索,知道我必须使用线程,但无法处理。您能帮我吗?
@FXML
private void btnTik(ActionEvent event){
Action action = new Action();
new Thread(){
public void run(){
for(int i = 0 ; i < nums.length ; i++){
min = i;
for(int j = i+1 ; j < nums.length ; j++){
if(nums[j] < nums[min]){
min = j;
btn[i].setText(Integer.toString(nums[i]));
action.sleep(200); //Thead.sleep(200)
}
btn[i].setText(Integer.toString(nums[i]));
action.sleep(200);
}
nums = action.Degistir(nums, i, min);
btn[i].setText(Integer.toString(nums[i]));
action.sleep(200);
System.out.println(nums[i]+" ");
}
}
}.run();
}
但是我只有在所有循环过程结束时才得到输出结果
这是因为您在run()
上调用了Thread
,因此它实际上并未创建新线程。相反,它在主UI线程上运行,并且永远不允许UI更新。
我认为多线程不是您要执行的操作的好解决方案,因为您将不得不弄清楚如何与UI线程进行通信以告诉它进行更新。多年前,当我在Swing中做类似的事情时,我在排序算法中使用了回调来通知UI更新。