在playn项目中使用Window.alert()

时间:2012-05-25 10:20:01

标签: gwt client-side playn

仅仅是为了测试我尝试使用playn项目中com.google.gwt.user.client.Window包中的Window.alert()函数。但是当我尝试运行该程序时,我收到了一条错误消息:

“引起:java.lang.UnsupportedOperationException:错误:GWT.create()仅在客户端代码中可用!例如,无法从服务器代码调用它。如果您正在运行单元测试,请检查您的测试用例扩展了GWTTestCase,并且没有从初始化器或构造函数中调用GWT.create()。 “

我真的不明白。在我的playn项目中只使用了客户端代码。那有什么问题?

1 个答案:

答案 0 :(得分:0)

gwt trunk中的纯java目前支持GWT.create()。我自己在playn项目中使用它{虽然有轻微的故障:Force GWT compiler to stop pruning invalid CompilationUnits}。

如果您下载并构建主干,则可以通过为导致错误的任何类注册ClassInstantiator来绕过GWT.create()问题。在这种情况下,Window类有一个WindowImpl的静态实例,当jvm命中Window类时会抛出此错误。如果为WindowImpl注册ClassInstantiator,则不会发生这种情况。不幸的是,Window.alert方法直接转向原生js,所以它可能仍会轰炸你。

如果您不知道如何/想要从trunk创建gwt,请给我发一封电子邮件,然后我就可以发送给你了。如果你仍然遇到.alert()作为本机方法的问题,请告诉我,我将创建一个自定义主干构建,将.alert()推迟到WindowImpl单例中,这样你就可以让它做一些有意义的事情,比如popup和警报信息; - }

如果您喜欢冒险,请下载gwt trunk,进入Window,将静态警报方法复制到WindowImpl上的实例级方法,将原始方法委托给WindowImpl,然后在您的java代码中调用ServerGwtBridge.register( WindowImpl.class,新的ClassInstantiator(){...}),并在java和android中返回你想要的.alert()实现。

相关问题