我一直在研究这个问题,但至少我还是非常困惑.
谁能给我一个何时使用Task和何时使用的具体例子Platform.runLater(Runnable);?究竟有什么区别?什么时候使用其中任何一个是否有黄金法则?
如果我错了也不纠正我,但这两个"对象"不是在GUI中用于更新GUI的主线程内创建另一个线程的方法吗?
所以我知道JavaFx在使用线程时更新GUI的方法称为Task,但代码的工作方式是否相似或存在差异.让我举个例子:
GUI之外的另一个类作为线程运行
public void run(){
while (socket.isConnected()) {
String x = input.next();
System.out.println(x);
mg.updateChat(x)
}
}
Run Code Online (Sandbox Code Playgroud)
在实际的GUI里面
public void updateChat(final String input){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
txtChat.setText(input);
}
});
}
Run Code Online (Sandbox Code Playgroud)
任务的工作方式是否完全相同?或者是否存在差异,是否有如何修改此代码以在JavaFx项目中工作?
我有几个问题Platform.runLater.我有一个JavaFX Application类.在这个类中,我运行一个线程(该线程从网络套接字读取数据).
现在当我Stage在线程内部创建一个新的时,系统会抛出一个execption(JavaFX事件调度程序线程和我的netork-read线程不一样) - 我理解这种行为.
但另一方面是,我将文本从网络阅读器附加到现有的TextArea或添加/删除一些项目ListView<String>- 这不会引发异常 - 为什么?我认为JavaFX是单线程的(ui库部分).这与Swing中的相同:有时它可以工作,有时你只有垃圾(因为EDT)?
我的问题:
Platform.runLater同一个run()方法?结合try catch(或多次捕获),它看起来很奇怪我知道Platform.runLater在一个线程中的用法并不是那么好(设计解决方案)