0

我正在尝试编写 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 错误消息,而不是在我直接调用该方法时?

4

2 回答 2

1

我无法证实这一点,但我认为这可能是 GAE 告诉我这不是如何在 GAE 中执行线程的方式。如果我从构建路径中删除 GAE 并停止使用 .fetch(),则代码可以正常工作。

现在我放弃了为 GAE 编写的想法,同时我更习惯了 Java。

于 2012-06-07T22:07:40.843 回答
0

尝试在 google app engine for java 中实现异步 http 时遇到奇怪的异常

您是否尝试将其作为 Java 应用程序而不是 Web 应用程序运行?

于 2012-06-05T00:26:17.163 回答