JavaFX 中的多线程会挂起 UI
2022-09-01 23:31:08
我有一个简单的JavaFX 2应用程序,有2个按钮,上面写着“开始”和“停止”。当单击开始按钮时,我想创建一个后台线程,该线程将进行一些处理并更新UI(例如进度条)。如果单击停止按钮,我希望线程终止。
我尝试使用我从文档中收集的类来执行此操作,这将对此正常工作。但是,每当我单击“开始”时,UI都会冻结/挂起,而不是保持正常。javafx.concurrent.Task
她是主类中用于显示按钮的代码:Myprogram extends Application
public void start(Stage primaryStage)
{
final Button btn = new Button();
btn.setText("Begin");
//This is the thread, extending javafx.concurrent.Task :
final MyProcessor handler = new MyProcessor();
btn.setOnAction(new EventHandler<ActionEvent>()
{
public void handle(ActionEvent event)
{
handler.run();
}
});
Button stop = new Button();
stop.setText("Stop");
stop.setOnAction(new EventHandler<ActionEvent>()
{
public void handle(ActionEvent event)
{
handler.cancel();
}
}
);
// Code for adding the UI controls to the stage here.
}
下面是类的代码:MyProcessor
import javafx.concurrent.Task;
public class MyProcessor extends Task
{
@Override
protected Integer call()
{
int i = 0;
for (String symbol : feed.getSymbols() )
{
if ( isCancelled() )
{
Logger.log("Stopping!");
return i;
}
i++;
Logger.log("Doing # " + i);
//Processing code here which takes 2-3 seconds per iteration to execute
Logger.log("# " + i + ", DONE! ");
}
return i;
}
}
非常简单,但是每当我单击“开始”按钮时,UI都会挂起,尽管控制台消息继续显示(只是这样做)Logger.log
System.out.println
)
我做错了什么?