【发布时间】:2011-01-24 23:15:43
【问题描述】:
我正在开发一个应该移植到不同供应商手机的 J2ME 应用程序。到目前为止,该应用程序运行良好,除了在摩托罗拉 V3 上(这是我尝试过的唯一一部摩托罗拉手机)。
问题是当我启动一个新线程时,当线程尝试更新图形时(通过调用 repaint()),图形系统是堆栈的。
一些有用的信息:
- 我在 Midlet 的构造函数中获取显示,并在应用程序生命周期内重用它。
- 只有一个类扩展 Canvas。每幅画都在这里发生。当我想要重新绘制图形时,我会从 UI 线程或另一个 Worker 线程调用 repaint() 方法。据我所知,每个线程都可以毫无问题地访问 UI。
- 我尝试了一个修复,在应用程序的开头,我获取正在运行的(UI)线程的名称并将其存储以供以后使用。在调用 repaint() 之前,我检查当前线程的名称是否等于 UI 线程的名称。如果它是颂歌,那么我做repaint(),否则我做:
display.callSerially(new Runnable() {
public void run() {
repaint();
}
});
您能否指出摩托罗拉实施 J2ME 的任何细节?如何通过线程更新 UI 来解决这个问题?
谢谢, 兹拉特科
【问题讨论】:
标签: multithreading user-interface java-me motorola