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

Gwt 在playn项目中使用Window.alert(),gwt,client-side,playn,Gwt,Client Side,Playn,为了进行测试,我尝试在playn项目中使用com.google.gwt.user.client.Window包中的Window.alert()函数。但是,当我尝试运行该程序时,收到如下错误消息: “原因:java.lang.UnsupportedOperationException:错误:GWT.create()仅在客户端代码中可用!例如,无法从服务器代码中调用它。如果正在运行单元测试,请检查测试用例是否扩展了GWTTestCase,以及是否未从初始值设定项或构造函数中调用GWT.create(

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

“原因:java.lang.UnsupportedOperationException:错误:GWT.create()仅在客户端代码中可用!例如,无法从服务器代码中调用它。如果正在运行单元测试,请检查测试用例是否扩展了GWTTestCase,以及是否未从初始值设定项或构造函数中调用GWT.create()。 "

我真的不明白。在我的playn项目中,只有客户端代码在使用。那么问题出在哪里呢?

GWT.create()目前在GWT主干中的纯java中受支持。我自己正在一个playn项目中使用它{尽管有一点小故障:}

如果下载并构建trunk,您将能够通过为导致错误的任何类注册ClassInstallators来规避GWT.create()问题。在本例中,Window类有一个WindowImpl的静态实例,当jvm命中Window类时,该实例会抛出此错误。如果为WindowImpl注册ClassInstallator,则不会发生这种情况。不幸的是,Window.alert方法直接使用本机js,因此它可能仍然会对您造成冲击

如果您不知道如何/希望从trunk构建gwt,请向我发送电子邮件,我可以向您发送JAR。如果您仍然对.alert()作为本机方法存在问题,请告诉我,我将创建一个自定义主干构建,将.alert()延迟到WindowImpl单例中,这样您就可以让它执行一些有意义的操作,例如弹出一条警报消息;-}


如果您觉得有冒险精神,请下载gwt trunk,进入Windows,将静态警报方法复制到WindowImpl上的实例级方法中,将原始方法委托给WindowImpl,然后在java代码中调用ServerGwtBridge.register(WindowImpl.class,new ClassInstallator(){…}),并返回您想要的任何实现。警报()在java和android中。

您能提供代码片段吗?Window.alert从来没有给我带来任何问题,所以我很确定……更新:它可以作为Web应用程序使用,但不能作为Java应用程序使用。当然,注册一个不同于每个构建的代理服务,让gwt调用Window.alert(),而Java或android弹出一个小部件可能会更容易。然后,您必须通过代理运行您的调用以发出警报,但这样就省去了对trunk进行黑客攻击的麻烦。