我正在尝试编写 GWT 应用程序的服务器端组件,该组件应每 3 分钟提取一次 XML 文件,并在解析 XML 后保持 Hashtable 为最新。
经过一番研究,我使用 ScheduledThreadPoolExecutor 设置了线程
stationParser = new TFLStationsParserThread(bikeStations);
scheduler.scheduleWithFixedDelay(stationParser, 2, 180, SECONDS);
TFLStationsParserThread 有一个最小的构造函数,这个 run() 方法
public void run() {
System.out.println("TFLStationsParserThread run()");
stationParser.refreshStationData(stations);
}
stationParser 最终通过以下命令获取数据
HTTPResponse response = URLFetchServiceFactory.getURLFetchService().fetch(request);
这是我的问题:当这.fetch()
是从 ScheduledThreadPoolExecutor 中运行时,我收到以下错误
com.google.apphosting.api.ApiProxy$CallNotFoundException: The API package 'urlfetch' or call 'Fetch()' was not found.
at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:98)
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:37)
at couk.mtaylor.bikes.server.TFLStationsParser.refreshStationData(TFLStationsParser.java:66)
at couk.mtaylor.bikes.server.TFLStationsParserThread.run(TFLStationsParserThread.java:35)
...
如果我注释掉scheduleWithFixedDelay
调度程序并refreshStationData
直接调用,那么我不会遇到这样的问题。
这使我相信该线程缺少一些必需的 GWT 库,但这超出了我的知识范围,我无法在网上找到任何有帮助的解决方案。
为什么我会从计划的线程中获得这些 GWT 错误消息,而不是在我直接调用该方法时?