gpt4 book ai didi

C# Action Delegate 的 Java invokeAndWait

转载 作者:行者123 更新时间:2023-12-02 00:51:28 27 4
gpt4 key购买 nike

我在this post中提到的问题实际上是由于跨线程 GUI 问题而发生的(我希望如此)。

您能帮我处理 Java 版本的操作委托(delegate)吗?

在 C# 中,它是这样内联完成的:

        this.Invoke(new Action(delegate()
{...}));

这在 Java 中是如何实现的?

谢谢。

public class processChatMessage implements Observer {

public void update(Observable o, Object obj) {


System.out.println("class class class" + obj.getClass());

if (obj instanceof String){

String msg = (String)obj;

formatChatHeader(chatHeader.Away, msg);

jlStatusBar.setText("Message Received");

// Show chat form
setVisibility();

}
}
}

processChatMessage 由从远程节点接收新数据触发的单独线程调用。

我认为错误是在尝试更新 GUI 控件时产生的。

你认为是这个原因吗?我问这个问题是因为我对 Java 和 C# 很陌生,但这就是我认为正在发生的事情。

解决方案:

public class processChatMessage implements Observer {

public void update(Observable o, Object obj) {

if (obj instanceof String){

final String msg = (String)obj;

try {

SwingUtilities.invokeAndWait(new Runnable( ) {

public void run( ) {

formatChatHeader(chatHeader.Away, msg);
jlStatusBar.setText("Message Received");
setVisibility();
}
});
} catch (InterruptedException e){

} catch (InvocationTargetException e){

}
}
}
}

最佳答案

最接近的等价物可能是 Runnable 接口(interface) - 基本上是一个单方法接口(interface),其方法不带参数且不返回任何值。您可以使用匿名内部类来实现类似于匿名方法的效果:

executeRunnable(new Runnable() {
public void run() {
// Do stuff here
}
});

是的,这有点冗长...但是希望 Java 7 闭包最终能够解决问题:)

现在,这就是 Action 委托(delegate)的一般思想。在这个特定实例中,您应该将SwingUtilities.invokeLater(Runnable)SwingUtilities.invokeAndWait(Runnable)视为的粗略等效项分别是 Control.BeginInvokeControl.Invoke

关于C# Action Delegate 的 Java invokeAndWait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2850865/

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