首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java invokeAndWait of C#操作代表

Java invokeAndWait of C#操作代表
EN

Stack Overflow用户
提问于 2010-05-17 16:31:11
回答 1查看 1.1K关注 0票数 0

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

你能帮我处理一下Java版本的行动代表吗?

在C#中,它是以以下内联方式完成的:

代码语言:javascript
复制
        this.Invoke(new Action(delegate()
        {...}));

这是如何在Java中实现的?

谢谢。

代码语言:javascript
复制
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#很陌生,但我认为这就是正在发生的事情。

解决方案:

代码语言:javascript
复制
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){

            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-17 16:36:16

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

代码语言:javascript
复制
executeRunnable(new Runnable() {
    public void run() {
        // Do stuff here
    }
});

是的,有点冗长.但是,希望Java 7闭包最终能够拯救:)

现在,这是Action代表的一般想法。在这个特殊的例子中,您应该将SwingUtilities.invokeLater(Runnable)SwingUtilities.invokeAndWait(Runnable)分别看作是Control.BeginInvokeControl.Invoke的粗略等效。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2850865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档