【问题标题】:Call Java method from GWT app via SWT Browser / SWT BrowserFunction通过 SWT Browser / SWT BrowserFunction 从 GWT 应用程序调用 Java 方法
【发布时间】:2012-04-13 09:29:21
【问题描述】:

在 RCP 应用程序中,我在 SWT 浏览器中显示基于 GWT 的 Web 应用程序。

我的目标是从 GWT 应用程序中调用 Java 方法。

据我了解,最简单的方法是使用 SWT BrowserFunction,它注入了一个 java 方法,我可以从 web 应用程序中调用该方法。

由于某种原因,我无法让它工作......

在 RCP 中,我定义了以下内容

public class GWTBrowserView extends ViewPart { 
    private GWTBrowser browser; 

    @Override 
    public void createPartControl(final Composite parent) { 
            this.browser = new GWTBrowser(parent, SWT.NONE); 
            this.browser.setUrl("url of gwt app"); 
            new BrowserFunction(this.browser, "onGWTEvent") { 

                    @Override 
                    public Object function(final Object[] arguments) { 
                            // Do something fancy
                            return super.function(arguments); 
                    } 
            }; 
    } 

在我的 GWT 入口点中,作为 onModuleLoad 的一部分,我正在调用方法:

private native void fireRCPEvent(String rcpEventJSON) /*-{
try{
    onGWTEvent(rcpEventJSON);
} catch(e) {
    alert(e.message)
}

任何想法如何通过 SWT 浏览器建立 GWT 和 RCP 之间的通信?

【问题讨论】:

    标签: java javascript gwt swt rcp


    【解决方案1】:

    您从 JSNI 调用了错误的函数。应该是:

    private native void fireRCPEvent(String rcpEventJSON) /*-{
     try{
        $wnd.onGWTEvent(rcpEventJSON); //notice the usage of $wnd object
     } catch(e) {
        alert(e.message)
     }
    }-*/
    

    GWT 编译的 JS 代码通常运行在一些单独的上下文中(例如 iframe),所以当您需要调用外部函数时,您必须明确指定要从父窗口(@98​​7654322@ 对象)调用函数。

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多