gpt4 book ai didi

multithreading - 工作线程无法更新 Motorola V3 上的 UI

转载 作者:行者123 更新时间:2023-12-03 12:57:16 28 4
gpt4 key购买 nike

我正在开发一个 J2ME 应用程序,该应用程序应该移植到不同供应商的手机上。到目前为止,该应用程序运行良好,除了摩托罗拉 V3(这是我尝试过的唯一摩托罗拉手机)。

问题是当我启动一个新线程时,当线程尝试更新图形(通过调用 repaint())时,图形系统是堆栈。

一些有用的信息:
- 我在 Midlet 的构造函数中获取显示,并在应用程序生命周期内重复使用它。
- 只有一个类扩展了 Canvas。每幅画都发生在这里。当我想要重新绘制图形时,我会从 UI 线程或另一个 Worker 线程调用 repaint() 方法。据我所知,每个线程都可以毫无问题地访问 UI。
- 我尝试了一个修复程序,在应用程序的开头,我使用正在运行的 (UI) 线程的名称并将其存储以备后用。在调用 repaint() 之前,我检查当前线程的名称是否等于 UI 线程的名称。如果它颂歌,那么我做 repaint() ,否则我会:

display.callSerially(new Runnable() {
public void run() {
repaint();
}
});

你能指出摩托罗拉对 J2ME 的实现的任何细节吗?如何通过线程更新 UI 来解决此问题?

谢谢,
兹拉特科

最佳答案

与 Swing 不同,MIDP 用户界面 API 是线程安全的。这意味着您不必使用 callSerially 来强制在 UI 线程上运行。有报告称 callSerially 在某些摩托罗拉设备上不能很好地工作,所以最好的办法是自己调用 repaint。

请注意,重绘只是对系统进行重绘的建议。如果要强制立即进行重绘,则必须调用 serviceRepaints 方法。

可以在 here 中找到有关 MIDP UI 事件处理的很好的讨论。 .

关于multithreading - 工作线程无法更新 Motorola V3 上的 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788308/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com