[英]How to call run method inside a thread from another method in android?
[英]How to transfer method call to another thread with some short code?
我有一个Gui类,应该用来更新GUI,它在Swing主线程中运行,必须从该线程访问。 我有一些方法可以更改Gui中显示的内容。 这些方法中的某些可以从其他线程中调用。 我最终得到了这段代码:
public void changeSomethingInGui() {
change button enabled state for example...
}
public void changeSomethingInGuiAsync() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Gui.this.changeSomethingInGui();
}
});
}
真是太烂了,还有5种类似的方法,这种策略将需要很多行,这些行对于读者来说是完全无用的代码。
可以肯定,没有比Java处理回调最糟糕的方法了,但是没有解决方法吗? 例如,在C ++中,我可以将方法作为对此类线程的回调来发布(使用boost库):
guiThreadClass.queueAction(boost::bind(Gui::DoSomethingInGui, guiInstance, param1, param2));
一行。 这样一来,我班上的每种方法都将变成3行-更加舒适。
在Java 8中 ,使用此方法
public void changeSomethingInGui() {
//change button enabled state for example...
}
您可以替换此调用
public void changeSomethingInGuiAsync() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Gui.this.changeSomethingInGui();
}
});
}
public void changeSomethingInGuiAsync() {
EventQueue.invokeLater(() -> {
Gui.this.changeSomethingInGui();
});
}
或方法参考
public void changeSomethingInGuiAsync() {
EventQueue.invokeLater(Gui.this::changeSomethingInGui);
}
可以在这里找到其他最新示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.