我正在编写小应用程序,现在我发现了一个问题。我需要调用一个(稍后可能是两个)方法(这个方法加载一些东西并返回结果)而不会在应用程序窗口中滞后。
我找到了像 Executor
或 Callable
这样的类,但我不明白如何使用这些类。
您能否发布任何对我有帮助的解决方案?
感谢您的所有建议。
编辑: 该方法 必须 返回结果。此结果取决于参数。是这样的:
public static HtmlPage getPage(String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
return webClient.getPage(page);
}
此方法工作约 8-10 秒。执行这个方法后,线程就可以停止了。但是我需要每 2 分钟调用一次这些方法。
编辑: 我用这个编辑代码:
public static HtmlPage getPage(final String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
Thread thread = new Thread() {
public void run() {
try {
loadedPage = webClient.getPage(page);
} catch (FailingHttpStatusCodeException | IOException e) {
e.printStackTrace();
}
}
};
thread.start();
try {
return loadedPage;
} catch (Exception e) {
return null;
}
}
使用此代码我再次出错(即使我将 return null
放在 catch 块之外)。
原文由 Sk1X1 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,我建议查看 Java Thread Documentation 。
使用线程,您可以传入一个名为 a
Runnable
的接口类型。文档可以在 这里 找到。可运行对象是具有run
方法的对象。当您启动一个线程时,它将调用此可运行对象的run
方法中的任何代码。例如:现在,这意味着当您调用
t.start()
时,它将运行您需要的任何代码,而不会滞后于主线程。这称为Asynchronous
方法调用,这意味着它与您打开的任何其他线程并行运行,例如main
线程。 :)