gpt4 book ai didi

Java SWT - 将数据从组件返回到其他线程的最佳方式

转载 作者:行者123 更新时间:2023-12-02 00:30:49 24 4
gpt4 key购买 nike

我有一个 Java SWT 应用程序,它运行一个单独的线程(UI 除外)来连接到聊天服务器。如果我想从连接线程更新 UI 组件,我可以轻松执行此操作:

        myUIclass.MyShellReference.getDisplay().asyncExec(
new Runnable() {
public void run(){
... update some UI component

}
}
);

我的问题是我找不到从 UI 线程上的组​​件获取数据的好方法。一个示例是尝试在我的连接线程中创建一个方法来拉取输入到 UI 线程上的文本框中的字符串...

private String getTheText(){
final String thetext;
myUIclass.MyShellReference.getDisplay().asyncExec(
new Runnable() {
public void run(){

// The below wont' work because thetext is final
// which is required in a nested class... blah!
thetext = myUIclass.getTextFromSomeTextBox();
}
}
);
return thetext;
}

上面的问题是我实际上无法捕获 getTextFromSomeTextBox() 方法返回的内容,因为我只能使用无法分配的最终变量。我知道的唯一其他解决方案是使用一些原子引用对象,但必须有更好的方法,因为我确信人们一直需要这样做。

任何帮助将不胜感激!!!

最佳答案

您可以使用一些传输对象来传递变量。非常愚蠢的例子演示了这个想法:

private String getTheText(){
final String[] thetext = new String[1]; //very stupid solution, but good for demonstrating the idea

myUIclass.MyShellReference.getDisplay().syncExec( //you should use sync exec here!
new Runnable() {
public void run(){

// The below wont' work because thetext is final
// which is required in a nested class... blah!
thetext[0] = myUIclass.getTextFromSomeTextBox();
}
}
);
return thetext[0];
}

另一种方法是使用回调或 Future 对象。

但实际上这是一种奇怪的方法。我通常会将值从 UI 线程传递到另一个线程,因为在 UI 线程中我们确切地知道发生了什么,以及我们向外部提供什么样的信息。

关于Java SWT - 将数据从组件返回到其他线程的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9121934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com