与Java / J2ME中的UI线程进行交互

问题描述

关于Java,您所描述的内容看起来像是SwingWorker(工作线程)

当Swing程序需要执行长时间运行的任务时,它通常使用辅助线程之一,也称为后台线程。

Swing程序包括以下类型的线程:

  • 初始线程,即执行初始应用程序代码的线程。
  • 事件分派线程,在其中执行所有事件处理代码。与Swing框架进行交互的大多数代码也必须在此线程上执行。
  • 工作线程,也称为后台线程,在其中执行耗时的后台任务。

单线程规则: 一旦实现了Swing组件,所有可能影响或依赖于该组件状态的代码都应在事件分发线程中执行。

在J2EE上下文中使用时,从EJB引用SwingWorker时需要小心。

关于 ,这取决于如果您正在开发的应用程序作为一个标准的MIDlet将任何支持MIDP的设备上运行,或 作为RIMlet,使用BlackBerry专用的API,因此只能在黑莓手机上运行一个基于CLDC的应用程序设备。

因为与MIDP的UI类不同,所以RIM与Swing相似,因为UI操作发生在事件线程上,而事件线程不像MIDP那样是线程安全的。要在事件线程上运行代码,应用程序必须获得事件对象上的锁,或者使用invokelater()或invokeAnDWait()–开发人员需要付出额外的努力,但是复杂性带有价格标签

但是对于LCDUI,您可以从多个线程访问表单

解决方法

我正在编写一个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是否有一个等效的框架?

解锁查看全部内容

付费后查看完整内容
限时 微信扫码支付 ¥9.9 19.9

编程问答相关问答

基本上我有两个张量,我试图将两个张量相乘(一个只是大小 [batch](即每个批次具有单个值的张量),
在 Spyder 中,我们可以使用 <code>ctrl + [</code> 表示左缩进,使用 <code>ctrl + ]</code> 表示右缩进,Pycharm 的替
我将通过使用存储过程查询一次生产数据库来开发报告数据库。 然后存储过程会将结果写入它自己
在“https://geth.ethereum.org/downloads/”设置 geth。 geth 是通过参考“https://www.rinkeby.io/#geth”的完整节点部分
我有以下相邻表格,我想将其转换为长格式。 <pre><code>ID &lt;- c(rep(&#39;A&#39;,1), rep(&#39;B&#39;,3)) From &lt;-
在 yarn 添加 @zeit/next-css 后,我不断收到未找到模块的错误。错误是: <pre><code>error - ./node_modules/@ant-de
例如,我想要以下类型: <pre><code>declare module &#34;*.scss&#34; { export const col1: string export const col2: s
我是 SQL 新手,我正在尝试从视图中选择最大值。数据库是电影和演员,嵌套查询部分有效。我试图找到
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注