gpt4 book ai didi

java - GWT 代码卡在reactToMessages 上

转载 作者:行者123 更新时间:2023-11-30 02:28:58 25 4
gpt4 key购买 nike

执行 GWT UI 时,执行陷入内部无限循环下面的代码:

public void reactToMessages(SessionHandlerServer handler) {
do {
try {
getStreamToOtherSide().flush();
MessageType messageType =
Message.readMessageType(getStreamFromOtherSide());
switch (messageType) {
case FREE_VALUE:
final FreeMessage freeMsg = FreeMessage.receive(this);
handler.freeValue(this, freeMsg.getIds());
break;
case INVOKE:
InvokeOnServerMessage imsg = InvokeOnServerMessage.receive(this);
ExceptionOrReturnValue result = handler.invoke(this, imsg.getThis(),
imsg.getMethodDispatchId(), imsg.getArgs());
sendFreedValues();
ReturnMessage.send(this, result);
break;
case INVOKE_SPECIAL:
handleInvokeSpecial(handler);
break;
case QUIT:
return;
default:
throw new RemoteDeathError(new BrowserChannelException(
"Invalid message type " + messageType));
}
} catch (IOException e) {
throw new RemoteDeathError(e);
} catch (BrowserChannelException e) {
throw new RemoteDeathError(e);
}
} while (true);

}

我正在开发 GWT 2.7.0,但我已经尝试更改为旧版本,但可惜没有成功。

最佳答案

该循环是旧版“开发模式”的一部分(已被“ super 开发模式”取代):浏览器中的插件可以连接到此 JVM,并通过将消息传递到此循环中来进行通信。流量控制是通过抛出异常来管理的,表明浏览器已断开连接。

这个循环不是问题 - 每次通过循环都意味着浏览器已成功调用 JVM 以 Java 运行部分 GWT 应用程序,然后 Java 将控制权返回给浏览器,因此它应该等待下一次从 JS 调用 Java。简而言之,如果您看到此代码执行,则没有任何问题被卡住,只有开发模式服务器正在等待执行某些操作。

在任何编译为 JS 的生产 GWT 中,这根本不存在 - 控制权保留在浏览器中,因为所有 Java 都编译为 JS,因此不需要任何浏览器插件管理。

最近的 Firefox 或 Chrome 不支持此插件,应使用 super 开发模式。

关于java - GWT 代码卡在reactToMessages 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44735156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com