问题描述
关于Java,您所描述的内容看起来像是SwingWorker(工作线程)。
当Swing程序需要执行长时间运行的任务时,它通常使用辅助线程之一,也称为后台线程。
Swing程序包括以下类型的线程:
单线程规则: 一旦实现了Swing组件,所有可能影响或依赖于该组件状态的代码都应在事件分发线程中执行。
在J2EE上下文中使用时,从EJB引用SwingWorker时需要小心。
关于 ,这取决于如果您正在开发的应用程序作为一个标准的MIDlet将任何支持MIDP的设备上运行,或 作为RIMlet,使用BlackBerry专用的API,因此只能在黑莓手机上运行一个基于CLDC的应用程序设备。
因为与MIDP的UI类不同,所以RIM与Swing相似,因为UI操作发生在事件线程上,而事件线程不像MIDP那样是线程安全的。要在事件线程上运行代码,应用程序必须获得事件对象上的锁,或者使用invokelater()或invokeAnDWait()–开发人员需要付出额外的努力,但是复杂性带有价格标签。
解决方法
我正在编写一个J2ME应用程序。其中一项功能是定期轮询目录的内容,如果有任何新内容,请将其绘制在屏幕上。我通过让UI表单启动一个带有指向自身的指针的轮询线程来完成此操作,并且当轮询线程找到某些内容时,它将回调该表单并调用syncrhonized方法来更新其显示。这似乎很好。
我的问题是这个。在C#/。NET中,我知道让非UI线程更新UI并不是一件好事,而处理此问题的正确方法是将其委派给UI线程。
例如以下内容:
public void DoSomeUIThing()
{
if (this.uiComponent.InvokeRequired)
{
this.uiComponent.Invoke(someDelegateThatCallsBackToThis);
}
else
{
this.uiComponent.Text = "This is the update I want to happen";
}
}
是否有等效的J2ME来管理此过程?Java呢?还是Java / J2ME在这方面玩得更好?如果没有,该怎么做?
[编辑]似乎Swing通过SwingUtilities.invokeLater()和invokeAndWait()方法支持了我要问的问题。J2ME是否有一个等效的框架?