[英]how to take value outside jbutton actionlistener?
如何从动作侦听器外部获取价值
jbtnOne.addActionListener(new ActionListener() {
private String ana_data;
@SuppressWarnings("override")
public void actionPerformed(ActionEvent le) {
ana_data=jtf.getText();
}
});
pos_pred=def_pred(f_path,ana_data,prob_p,poslen,pcount);
neg_pred=def_pred(f_path1,ana_data,prob_n,neglen,ncount);
我需要从ActionListener外部获取数据,然后再给定方法吗? 有人可以帮帮我吗?
无法做到这一点。
原因是在方法的其余部分已经运行时,稍后才执行ActionListener
。
因此,如果您想使用依赖于动作监听器的东西,则必须将其移动到那里(或在方法中从ActionListener
调用tat)。
解决问题的可能的通用模式之一是使用诺言(Java中的CompletableFuture
),其中部分代码取决于异步执行的代码中的值。 通常,建议在这种情况下异步设计整体代码,以使产生值的方法和要求该值的方法都可以在某个时间点进行,即使是在稍后的某个时间点。 从您的问题出发,目前尚不清楚是否可以按照您的情况进行设计。 所以我假设你不能。 如果您的调用者无法异步运行,并且需要同步流中异步操作的结果,那么您将需要阻塞线程以等待结果:
CompletableFuture<String> anaDataPromise = new CompletableFuture<>();
jbtnOne.addActionListener(new ActionListener() {
@SuppressWarnings("override")
public void actionPerformed(ActionEvent le) {
anaDataPromise.complete(jtf.getText());
}
});
anaData = anaDataPromise.get(); // will block until action performed
// anaData = anaDataPromise.get(10, TimeUnit.MINUTE); // will block until action performed or for max of 10 minutes
如果可以允许需要anaData
值的代码完全异步,则可以以非阻塞方式编写它:
CompletableFuture<String> anaDataPromise = new CompletableFuture<>();
jbtnOne.addActionListener(new ActionListener() {
@SuppressWarnings("override")
public void actionPerformed(ActionEvent le) {
anaDataPromise.complete(jtf.getText());
}
});
anaDataPromise.whenComplete((anaData, throwable) -> {
if (throwable != null) {
throw new RuntimeException(throwable);
}
// do something with anaData value
});
// this point is reached immediately as the above code simply declares
// the action that will run later, the actions themselves are not yet run
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.