【发布时间】:2017-08-24 11:39:21
【问题描述】:
我有 50% 的绝望:P。我尝试(一开始)从线程代码更新 GUI,并得到 NullException。看了一段时间后,我了解到 Thread 淹没了 JavaFX 应用程序窗口,为了让我从 Thread 更新 GUI,我需要使用以下代码:
Platform.runLater(new Runnable() {
@Override public void run() {
//Update UI here
for (int i=0; i<2000;i++)
{
MyMainClass.leftPaneTextArea.appendText("Goodi!\n");
}
}
});
所以我确实使用了这段代码,它确实允许我编辑我的主类的 GUI。但是,我的问题很简单。 =>这个代码,我从一个线程运行,是一个位于公共 void run() 内的代码(我运行代码的线程)。它看起来像这样:
@Override
public void run() {
String tmpVar;
... (Some code)
... (Some code)
... (Some code)
Platform.runLater(new Runnable() {
@Override public void run() {
//Update UI here
for (int i=0; i<2000;i++)
{
MyMainClass.leftPaneTextArea.appendText("Goodi!\n");
}
}
});
... (Some code)
... (Some code)
... (Some code)
}
如何将参数从父级的 public void run() 传递到这个? 比如String tmpString(我想传下去)。
请注意,如果我在公共 void run() 之外将其声明为静态(例如)=> 我运行了很多线程,因此更新静态 var 可能并不总是准确的(因为很多线程会更新它同时性)
谢谢!
【问题讨论】:
-
Runnable 的 void run() 不接受任何参数,也不返回任何内容。您想要传递的值可以作为字段存储在父类中,然后在子类中调用父类的字段。
-
只要
tmpVar是最终的(或实际上是最终的,这意味着您只需为其分配一次值),您就可以在“内部”run方法中访问它。你能edit这个问题让你尝试过的代码更明确一点吗? -
如果你制作
tmpVarfinal,你可以在你的匿名Runnable中使用它。
标签: java javafx runnable java-threads