GWTA中的GWTAI applet集成问题

时间:2010-05-28 19:23:39

标签: java gwt applet

我正在使用gwtai将java applet集成到我的gwt项目中。从我的主应用程序到applet的基本通信(例如调用返回int或boolean值的简单方法)可以正常工作。

但是我需要集成这个applet的主要原因是,我需要它连接到另一台服务器并接收答案并将其传递给我的gwt-application。

所以applet中有一个基本方法:

public String SendAndReceive(String host, int sendPort, int receivePort, String query)

连接到服务器,接收答案并以字符串形式返回此答案。

当我现在尝试像这样调用这个方法时:

applet.SendAndReceive("0.0.0.0", 9099, 2000, "show streams;");

我经常遇到以下错误(最后的完整错误消息):

com.google.gwt.core.client.JavaScriptException: (String): Error calling method on NPObject! [plugin exception: java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write)]

我找不到解决方案(对于gwtai是一个非常罕见的话题),我发现的(以及Exception让我们假设的是),有一个安全问题 - 也许是因为我连接到另一台服务器。我还阅读了一些关于浏览器的单一来源策略的内容,指向同一方向的内容......到目前为止,我从未使用过java applet。

因此,如果某人有解决方案或提示,我会非常感激。如果更多代码是有用的,我可以给。

谢谢,

安迪


完整的错误消息:

21:03:49.864 [ERROR] [follovizergwt]无法加载模块入口点类follovizer.gwt.client.FolloVizerGWT(有关详细信息,请参阅相关的异常) com.google.gwt.core.client.JavaScriptException:(String):在NPObject上调用方法时出错! [插件异常:java.security.AccessControlException:访问被拒绝(java.util.PropertyPermission * read,write)]。     在com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:195)     在com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)     在com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)     在com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264)     在com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)     at follovizer.gwt.client.AnduINAppletImpl.SendAndReceive(AnduINAppletImpl.java)     在follovizer.gwt.client.FolloVizerGWT.createLayout(FolloVizerGWT.java:92)     在follovizer.gwt.client.FolloVizerGWT.onModuleLoad(FolloVizerGWT.java:40)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)     在java.lang.reflect.Method.invoke(Method.java:597)     在com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:369)     在com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:185)     在com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:380)     在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222)     在java.lang.Thread.run(Thread.java:619)

2 个答案:

答案 0 :(得分:0)

与其他浏览器插件一样,Java Applet具有security restrictions。值得注意的是,他们只能与他们来自的主机建立网络连接。您无法使用小程序连接到任意服务器。

与其他服务器通信是一个相当普遍的要求,有几种方法可以解决它。常见的解决方案是Flash + Crossdomain.xml和JSONP。还有其他解决方案,只需谷歌搜索所有可能的解决方案。

答案 1 :(得分:0)

如果您的Java小程序需要发出跨域请求,则需要对其进行签名。默认情况下,Java沙箱不允许applet获取驻留在域中的页面不同于applet源自的域。