我50%的希望渺茫:P.我(一开始)试图从一个线程的代码中更新GUI,但得到了NullException。在阅读了一段时间后,我了解到线程淹没了JavaFX应用程序窗口,为了从线程更新GUI,我需要使用以下代码:
Platform.runLater(new Runnable() {
@Override public void run() {
//Update UI here
for (int i=0; i<2000;i++)
{
MyMainClass.leftPaneTextArea.appendText("Goodi!\n");
}
}
});
所以我确实使用了这个代码,它确实允许我编辑我的主类的图形用户界面。不过,我的问题很简单。=
@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()中的参数传递给这个?。例如,字符串tmpString(我想传递它)。
请注意,如果我在public void run()之外将其声明为static(例如)=
谢谢你!。
你总是可以用吸气剂...
public class YourClass {
private String myVar;
public void do something(String aVal) {
myVar= "Value you want to pass";
this.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("TAG",getMyVar());
}
});
}
private String myVar(){
return myVar;
}
}
正如James_D所发布的,一个选项是在内部类中使用final
var(匿名与否)
其他选项,如new MyRunnable(someString)
或使用Consumer
基本上,您需要考虑将参数传递给Runnable
对象,而不是传递给run()
方法。
如果将匿名类设置为内部类,则很明显:
@Override
public void run() {
String tmpVar;
// ... (Some code)
// ... (Some code)
// ... (Some code)
Platform.runLater(new Updater(tmpVar));
// ... (Some code)
// ... (Some code)
// ... (Some code)
}
// ...
public static class Updater implements Runnable {
private final String var ;
public Updater(String var) {
this.var = var ;
}
@Override
public void run() {
// Access var here
for (int i=0; i<2000;i++){
MyMainClass.leftPaneTextArea.appendText("Goodi!\n");
}
}
}
现在,如果tmpVar
是最终的
,或者实际上是最终的1,那么它将与您的匿名内部类一起工作,并且基本上被翻译成与上面的内部类完全相同的东西(换句话说,匿名内部类获取一个隐式字段,该字段填充了最终变量的值):
@Override
public void run() {
final String tmpVar = ...;
// ... (Some code)
// ... (Some code)
// ... (Some code)
Platform.runLater(new Runnable() {
@Override public void run() {
// access tmpVar here:
for (int i=0; i<2000;i++)
{
MyMainClass.leftPaneTextArea.appendText("Goodi!\n");
}
}
});
// ... (Some code)
// ... (Some code)
// ... (Some code)
}
语言html" target="_blank">设计者实际上可以用非最终变量来完成这项工作,但是他们认为结果会太混乱。会发生的是,它将被翻译成上面看到的相同的内部类:换句话说,当前的tmpVar
值将被隐式传递到匿名内部类中的一个字段。这将是一个全新的变量,与您正在访问的变量具有不同的作用域,它的值将是创建匿名内部类时tmpVar
值的“快照”。有一个看起来像是一个变量,实际上是指两个不同的变量,可能有不同的值,这被认为太混乱和容易出错。
但是,如果tmpVar
不是final(或实际上是final):也就是说,你要给它赋值多次,你可以显式地“快照”变量的值:
@Override
public void run() {
String tmpVar ;
// ... (Some code)
// ... (Some code)
// ... (Some code)
final String varCopy = tmpVar ;
Platform.runLater(new Runnable() {
@Override public void run() {
// access varCopy here:
for (int i=0; i<2000;i++)
{
MyMainClass.leftPaneTextArea.appendText("Goodi!\n");
}
}
});
// ... (Some code)
// ... (Some code)
// ... (Some code)
}
(1) “有效最终”意味着变量只分配了一次值。等价地,这意味着您可以在不产生任何编译错误的情况下声明它final
。
我试图将一些信息从子项中的输入字段传递给父项。 到目前为止我所掌握的是: 34 this.setstate({searchstring:event.target.value},()=>{ >35 this.props.onchild(this.state.SearchString); 希望有人能帮忙。顺便说一句,我是个小人...
问题内容: 我有两个组成部分: 第一个是父组件,它是通常的React组件。 第二个是孩子,它是功能组件。 我想将 Titles 的值(处于子状态)传递给父Component。这是我的 子组件 代码: 这是我的 父组件 : 这看起来很容易,但这是我第一次使用功能组件。你能帮我吗 ? 问题答案: React就是关于在组件树中向下流动的数据。如果您希望能够显示和/或修改彼此之间的共享状态,则应提升状态并
我有一个如下所示的graphql查询: 因此,名称和电子邮件将由名为详细信息的其余endpoint解析,但是地址字段需要由另一个名为地址的其余endpoint解析。>rest终结点还需要在中传递的(因为我的rest服务需要该字段)。我不确定,在这种情况下,我如何设计我的解析器? 同样,一个字段一旦解析,是否可以将数据发送到另一个字段?这在grapqhql中可能吗?
null 这意味着我应该将代理列表(端口)从Scala传递到远程Kafka,因为否则它将尝试使用默认端口。 问题是,根据日志,远程计算机无法识别参数。我还尝试将此参数重命名为、和,但日志中始终出现相同的错误,然后默认使用端口(显然不使用消息)。 在POM文件中,我对Kafka和Spark使用了以下依赖关系: 这是我的Scala代码(如果我使用自己安装在Amazon Cloud中的Kafka,在那里
问题内容: 我想将值传递给javascript。如果可能的话,我该怎么办?如何在后备bean中接收它们? 问题答案:
问题内容: 我们已经设置了一些参数来在Jenkins中执行构建(使用简单的“参数化构建”设置)。作业被设置为Maven测试。有没有办法以编程方式将这些参数传递到我们的Java代码中?我们需要基于通过Jenkins设置的参数来执行某些更新功能。 问题答案: 是的,您可以通过Maven执行将Jenkins参数传递给Java代码,如下所示: 请注意, $ JOB_PARAM_1 将捕获Jenkins上设