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