繁体   English   中英

如何在jbutton actionlistener之外获取价值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM