私は、画面サイズに合わせて拡大縮小された任意の画像を表示するアプリケーションを開発しようとしています。しかし、EDTで画像を拡大するとUIがかなり表示されるので、次のコードを使用してバックグラウンドスレッドで画像を拡大することにしました。コードネーム1の画像をスケーリングするときにEDT違反が検出されました
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違反」については、[手動セクション](https://www.codenameone.com/manual/edt.html#_debugging_edt_violations)は一般的なものであり、画像操作については何も言及していません。 –
EDT以外の画像は公式にはサポートされていないため、記載されていません。 EDTまたはスレッドセーフであると予想されるメソッドは、JavaDocで明示的に言及されています。 EDTには常に他のすべてがあるはずです –