我的CN1应用程序使用XFClient与运行Xataface的服务器上的mySQL数据库进行通信。计时器线程调用XFClient的findAndWait方法,然后在重复之前睡眠1秒。它可以在99%以上的时间内正常运行,但是有时应用程序遇到网络问题(错误的网关,ConnectionExceptions,SocketTimeOutException等),并停止与服务器通信,因为findAndWait会始终等待,尽管有异常。发生异常时,findAndWait是否可以停止等待?
这是我到目前为止所尝试的:
在NetworkManager的handleException中,在下面添加了代码(基于https://github.com/codenameone/CodenameOne/issues/733)。它编译并运行,但是findAndWait一直在等待。
NetworkManager.getInstance().addErrorListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
System.out.println("got a network error. will kill the connect request and consume it.");
if (theXFClient.getcRMP() != null) {
NetworkManager.getInstance().killAndWait(theXFClient.getcRMP());
}
evt.consume();
}
});
我正在模拟器上运行此程序,启动应用程序,然后通过在模拟器菜单中禁用网络连接来触发问题。我希望定时器线程在我重新打开网络连接后仍能继续运行,但仍然停滞。
BTW-当应用程序通过模拟器菜单(和实际设备)暂停并恢复运行时,计时器将从上次停止的地方开始计时。希望我们能找到一种方法来解决网络故障。
Thx,迈克
我刚刚添加了可以在XFClient类和XFQuery类上设置的超时和读取超时支持。如果特定查询的XFClient和XFQuery都指定了超时,则XFQuery超时将优先。
此更新将很快在Codename One设置中,但是您现在可以直接从here下载此新版本。>