gpt4 book ai didi

Java SWT : wrapping syncExec and asyncExec to clean up code

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:08 25 4
gpt4 key购买 nike

我有一个使用 SWT 作为工具包的 Java 应用程序,我已经厌倦了更新 GUI 元素所需的所有丑陋的样板代码。

只是为了将禁用的按钮设置为启用,我必须经历这样的事情:

shell.getDisplay().asyncExec(new Runnable() {
public void run() {
buttonOk.setEnabled(true);
}
});

我更喜欢尽可能地保持我的源代码扁平化,但我需要多达 3 个缩进级别来做一些简单的事情。

有什么方法可以包装它吗?我想要这样的类(class):

public class UIUpdater {
public static void updateUI(Shell shell, *function_ptr*) {
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
//Execute function_ptr
}
});
}
}

可以这样使用:

UIUpdater.updateUI(shell, buttonOk.setEnabled(true));

像这样的东西对于隐藏 SWT 似乎认为做任何事情都是必要的可怕困惑非常有用。

据我了解,Java 不能做函数指针。但是 Java 7 将有一个叫做 Closures 的东西,这应该是我想要的。但与此同时,我能做些什么来将函数指针或回调传递给另一个要执行的函数吗?

顺便说一句,我开始认为在 Swing 中重做这个应用程序是值得的,而且我不必忍受 SWT 这种丑陋的废话和非跨平台性。

最佳答案

我的 SWT 代码中也有类似的问题。

我写了一个基类,它只有 asyncExec 和 syncExec 方法。对于我想调用的每个 GUI 方法,我都有一个方法。

我的非 GUI 线程类扩展了基类。

所以在非 GUI 线程类中,我会调用类似 setEnabled(shell, true)

在基类中,我将定义一个 public void setEnabled(Shell shell, boolean flag) 方法,它将包含第一个示例中的代码。

关于Java SWT : wrapping syncExec and asyncExec to clean up code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2969189/

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