我将您的重写
SwingWorker如下:
class PrimeNumbersTask extends Task<List<Integer>> { PrimeNumbersTask(textarea textarea, int numbersToFind) { // initialize } @Override protected List<Integer> call() throws Exception { while (!enough && !isCancelled()) { number = nextPrimeNumber(); updateMessage(Integer.toString(number)); updateProgress(numbers.size(), numbersToFind); } return numbers; }}
用法:
textarea textarea = new textarea();PrimeNumbersTask task = new PrimeNumbersTask(numbersToFind);task.messageProperty().addListener((w, o, n)->textarea.appendText(n + "n"));new Thread(task).start(); // which would actually start task on a new thread
说明:
是的,我们没有JavaFX中的
publish()方法
SwingWorker,但是在您的情况下,使用方法
updateMessage()就足够了,因为我们可以向该属性注册一个侦听器,并在每次更新消息时添加新行。
如果这还不够,您可以随时使用它
Platform.runLater()来计划GUI更新。如果您进行过多的GUI更新,并且GUI线程正在减慢速度,则可以使用以下惯用法:限制javafxgui更新
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)