2013-04-06 88 views
0

在託管模式下啓動GWT時,可以在applet和GWT應用程序之間進行通信(反之亦然)?我認爲不,因爲applet只能與JavaScript通信(通過LiveConnect),但GWT的託管模式不會產生任何JS ...GWT託管模式和小程序

+0

更新了我的回覆,希望它對您有用 – 2013-04-07 10:03:56

回答

2

儘管託管模式運行jvm中的部分代碼,但所有jsni/dom /本地調用委託給瀏覽器,所以在你的情況下應該沒有什麼區別,你可以調用js與你的applet進行通信。當然,不可能的是在相同的調試器會話中調試gwt和applet代碼。

撥叫GWT小程序的方法,你需要像JSNI塊:

private native Object callFoo(String param) /*-{ 
    var appplet = document.getElementById('myapplet'); 
    return applet.foo(param); 
}-*/ 

,並從你的小應用程序調用GWT代碼,你需要另一個JSNI方法導出GWT代碼(注意,你必須在您的入口點調用一次)

private native void exportBar() /*-{ 
    window.bar = function(param) { 
     return @com.examle.MyClass::myStaticMethod(*)(param); 
    } 
}-*/ 

不管怎樣,因爲所有的鍋爐板代碼需要(包裝和JSNI)是自動生成的,我知道有小程序溝通的最佳方法是使用gwtai

Gwtai,在託管模式下工作沒有問題,雖然他們在他們的網站上說don't expect it to be stable,它足夠穩定,我已經在生產中用了很長時間。

GwtAI提供易於使用的跨瀏覽器的Java小程序整合谷歌Web工具包(GWT)的項目。 GwtAI包含許多實用程序和幫助程序類,例如自動創建包裝小部件和與Java小程序通信的機制。

您需要下載兩個文件(GwtAI-client.jar中和GwtAI-core.jar添加),並在項目中包含的類路徑,然後修改.ui.xml文件繼承gwtai,你將能夠啓動編碼。

首先,您必須在gwt代碼中定義applet接口,以便使用延遲綁定的GWT編譯器創建通信類實現。

@ImplementingClass(MyClassImpl.class) 
@Height("60") @Width("350") @Archive("GwtAI-Client.jar, MyApp.jar") 
public interface MyApplet extends Applet { 
    public Object foo(); 
} 

然後你必須在你的小程序代碼中實現這個接口。

public class MyClassImpl extends JApplet implements MyApplet { 
    public Object foo(){ 
     return "Hello"; 
    } 
} 

最後使用小程序從您的GWT應用

MyApplet applet = GWT.create(MyApplet.class); 
Object foo = applet.foo(); 

閱讀GettingStarted導向以獲得更多信息。

+0

感謝您的詳細解答。所以,如果我通過JSNI代碼調用applet,它會工作嗎?附:我不想使用'GWT-AI',因爲'GwtAI還不適合用於生產......不要指望它穩定。「不管怎樣,謝謝。 – MyTitle 2013-04-07 10:41:21

+0

是的,任何jsni都以託管模式工作。我有生產中的錢。更新了我的答案。 – 2013-04-07 11:22:15

相關問題