【发布时间】:2018-07-23 22:50:21
【问题描述】:
假设我有一个这种形式的类。
class TestClass implements SomeInterface {
Data myData;
public TestClass() {
}
@Override
public void onData(Data data) {
// do stuff with data
myData = data
}
}
其中SomeInterface 在后台线程上进行一些数据处理并调用onData,后者也在后台线程上运行。我希望能够在Main 线程上使用onData 返回的数据(更新UI,在主线程上执行其他操作等),因为我确切知道调用后台线程onData 后的时间将被调用。由于我使用的是某个库中的SomeInterface,因此我无法修改此功能(我并没有完全按照预期使用它)。
在 Android 中我会做一些事情 like this 但我显然不能在纯 Java 应用程序中这样做,因为没有 Looper 这样的事情。从后台线程设置实例变量也不允许我从主线程访问它。
【问题讨论】:
-
如果你使用AWT或者swing,那么使用
EventQueue.invokeLater(Runnable) -
看看
SwingWorker,这对于Java来说基本上是一样的。 docs.oracle.com/javase/10/docs/api/javax/swing/SwingWorker.html 请注意,无论是 Android 还是 Java 桌面,主线程都不会更新 gui。 -
什么GUI框架?例如,Swing 提供了
SwingWorker和SwingUtilities.invokeLater,它们为您提供了将执行移至主线程的方法 -
我没有使用 Swing、AWT 或任何 UI 库。我只是以更新 UI 为例。
-
如果不是 Swing 或 AWT,它是什么 UI?
标签: java multithreading