codenameone - 在代号一中缩放图像时检测到 EDT 违规

标签 codenameone

我正在尝试开发一个应用程序,该应用程序将显示缩放以适合屏幕大小的任意图像。但是,在 EDT 上缩放图像会显着降低 UI,因此我决定使用以下代码在后台线程中缩放图像。

    final Runnable updateUI = new Runnable() {
        public void run() {
            //Update the UI here
        }
    };
    Runnable r = new Runnable() {
        public void run() {
            Image i = Resources.getGlobalResources().getImage("apple-icon.png");
            i.scaled(50, 40);
            //Display.getInstance().callSerially(updateUI);
            //This line of code is not related to the EDT error
        }
    };
    new Thread(r).start();

但是尽管图像不在 GUI 上(还),模拟器在控制台中显示以下错误(重复数百次,有时会打印不完整的堆栈):

EDT violation detected!
com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
    at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:545)
    at com.codename1.impl.javase.JavaSEPort.getImageWidth(JavaSEPort.java:3945)
    at com.codename1.ui.Image.getWidth(Image.java:689)
    at com.codename1.ui.EncodedImage.getWidth(EncodedImage.java:511)
    at com.codename1.ui.EncodedImage.scaledEncoded(EncodedImage.java:600)
    at com.codename1.ui.EncodedImage.scaled(EncodedImage.java:653)
    at com.mycompany.myapp.MyApplication$1.run(MyApplication.java:81)
    at java.lang.Thread.run(Thread.java:745)

我想知道这是预期的行为还是我的代码中的错误,以及如何消除此错误?请指教。

最佳答案

尽管有警告,但通常应该可以正常工作,事实上我们的代码正是这样做的,并产生了 EDT 警告。

检测 EDT 违规是不准确的,因为某些 EDT 违规可能会在未到达实现层的情况下发生。这就是为什么我们选择过于急切,宁愿出现“误报”也不愿完全错过目标。

请注意,虽然缩放应该对 EDT 有效,但其他一些图像处理可能不会。例如。在后台绘制图像在 iOS 上可能会严重失败。

关于codenameone - 在代号一中缩放图像时检测到 EDT 违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41398916/

相关文章:

codenameone - 将按钮添加到 Codename One 工具栏

java - 使用 codenameone 制作一个将图像上传到服务器的应用程序

codenameone - 不支持的主要.次要版本 51.0

java - 我在添加 SideMenu 我的应用程序时遇到问题

java - 迭代每个键有多个值的字符串对象的映射

codenameone - 代号一 : How to upload app on appstore

menu - Codename One Overflow 菜单将滚动标签设置为 false

css - 如何在代号 one 中自定义 Android 选项卡的外观?

java - 获取图像名称CodeNameOne

java - 代号一谷歌登录问题