java - EDT 性能非常慢,显示触发错误

标签 java codenameone

我使用 infinteScrollAdapter 和来自 json 的 connectionRequest 来填充组件,但有时它会给出以下错误,而它通常运行良好。这里可能有什么问题?如果我再次运行,它工作正常,但有时会挂起相当长的时间,然后显示此错误

[AWT-EventQueue-0] 0:0:0,0 - EDT performance is very slow triggering this exception!
[AWT-EventQueue-0] 0:0:0,1 - Exception: java.lang.ArrayIndexOutOfBoundsException - 1000
java.lang.ArrayIndexOutOfBoundsException: 1000
[AWT-EventQueue-0] 0:0:0,75 - EDT performance is very slow triggering this exception!
[AWT-EventQueue-0] 0:0:0,76 - Exception: java.lang.ArrayIndexOutOfBoundsException - 1000
    at com.codename1.ui.Display.addPointerEventWithTimestamp(Display.java:1678)
    at com.codename1.ui.Display.pointerDragged(Display.java:1704)
    at com.codename1.impl.CodenameOneImplementation.pointerDragged(CodenameOneImplementation.java:1957)
    at com.codename1.impl.CodenameOneImplementation.pointerDragged(CodenameOneImplementation.java:1845)
    at com.codename1.impl.javase.JavaSEPort.access$1900(JavaSEPort.java:160)
    at com.codename1.impl.javase.JavaSEPort$C.mouseDragged(JavaSEPort.java:957)
    at java.awt.Component.processMouseMotionEvent(Component.java:6573)
    at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3339)
    at java.awt.Component.processEvent(Component.java:6294)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4550)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
java.lang.ArrayIndexOutOfBoundsException: 1000
    at com.codename1.ui.Display.addPointerEventWithTimestamp(Display.java:1676)
    at com.codename1.ui.Display.pointerDragged(Display.java:1704)
    at com.codename1.impl.CodenameOneImplementation.pointerDragged(CodenameOneImplementation.java:1957)
    at com.codename1.impl.CodenameOneImplementation.pointerDragged(CodenameOneImplementation.java:1845)
    at com.codename1.impl.javase.JavaSEPort.access$1900(JavaSEPort.java:160)
    at com.codename1.impl.javase.JavaSEPort$C.mouseDragged(JavaSEPort.java:957)
    at java.awt.Component.processMouseMotionEvent(Component.java:6573)
    at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3339)
    at java.awt.Component.processEvent(Component.java:6294)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4550)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1000
    at com.codename1.ui.Display.addPointerEvent(Display.java:1637)
    at com.codename1.ui.Display.pointerReleased(Display.java:1789)
    at com.codename1.impl.CodenameOneImplementation.pointerReleased(CodenameOneImplementation.java:2123)
    at com.codename1.impl.CodenameOneImplementation.pointerReleased(CodenameOneImplementation.java:1871)
    at com.codename1.impl.javase.JavaSEPort.access$1600(JavaSEPort.java:160)
    at com.codename1.impl.javase.JavaSEPort$C.mouseReleased(JavaSEPort.java:923)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我的代码:

int sizethumb = 0;
        int sizethumb1 = 0;
        if (responsesImg.size() > 0) {

            sizethumb = largePlaceholder.getWidth();
            sizethumb1 = largePlaceholder.getHeight();
            findMainImg(f).setPreferredSize(new Dimension(sizethumb, sizethumb1));

            findMainImg(f).getAllStyles().setBgImage(URLImage.createToStorage(largePlaceholder, newsImgFilename + "_0_ y", responsesImg.get(0).get("image_url"), URLImage.RESIZE_SCALE_TO_FILL));

            mainImageImgViewer = null;
            mainImageImgViewer = findMainImg(f).getUnselectedStyle().getBgImage();
        }

        if (responsesImg != null) {
            if (responsesImg.size() > 1) {
                sizethumb = thumbnail.getWidth();
                sizethumb1 = thumbnail.getHeight();
                findNewsThumbnail1(f).getAllStyles().setBgImage(URLImage.createToStorage(largePlaceholder, newsImgFilename + "_0_ x", responsesImg.get(1).get("image_url"), URLImage.RESIZE_SCALE_TO_FILL));
                findNewsThumbnail1().setPreferredSize(new Dimension(sizethumb, sizethumb1));
                thumbnail1 = null;
                thumbnail1 = findNewsThumbnail1(f).getUnselectedStyle().getBgImage();
            }
            if (responsesImg.size() > 2) {
                findNewsThumbnail2().setPreferredSize(new Dimension(sizethumb, sizethumb1));
                System.out.println("thumbnail img " + responsesImg.get(2).get("image_url"));
                findNewsThumbnail2(f).getAllStyles().setBgImage(URLImage.createToStorage(largePlaceholder, newsImgFilename + "_0_ w", responsesImg.get(2).get("image_url"), URLImage.RESIZE_SCALE_TO_FILL));
                thumbnail2 = null;
                thumbnail2 = findNewsThumbnail2(f).getUnselectedStyle().getBgImage();
            } else if (responsesImg.size() == 0) {
                System.out.println("null images");
            }
        }

我的连接:

class MR extends ConnectionRequest {

private Map<String, Object> resultsdata;
private Vector<Map<String, Object>> responses;

@Override
protected void readResponse(InputStream input) throws IOException {
   JSONParser p = new JSONParser();
   resultsdata = p.parse(new InputStreamReader(input));
   responses = (Vector<Map<String, Object>>) resultsdata.get("root");
   newsImageArray = new ArrayList();
   for (int i = 0; i < responses.size(); i++) {
       Hashtable hm = (Hashtable) responses.get(i);
       newsDetailHome = (String) hm.get("details");
       newsDateHome = (String) hm.get("date");
       newsTimeHome = (String) hm.get("time");
                    newsTitleHome = (String) hm.get("title");

                    responsesImg = new Vector<>();
                    if (hm.get("photo").toString() != "[]") {
                        responsesImg = (Vector) hm.get("photo");
                    } else {

                    }
                }
            }

            @Override
            protected void handleErrorResponseCode(int code, String message) {
                Dialog.show("Error msg", "The server returned the error code: " + code, "ok", null);
            }

            @Override
            protected void handleException(Exception err) {
                Dialog.show("Connection msg", "There was a connection error: " + err, "ok", null);
            }
        };

        MR r = new MR();
        r.setPost(false);
        if (newsIdValueFromHome == null) {
            r.setUrl("http://capitaleyedevelopment.com/~admin/traffic/api/news/getNewsDetails?news_id=" + newsIdValue);
        } else {
            r.setUrl("http://capitaleyedevelopment.com/~admin/traffic/api/news/getNewsDetails?news_id=" + newsIdValueFromHome);
        }
        r.setDuplicateSupported(true);
        NetworkManager.getInstance().shutdownSync();
        NetworkManager.getInstance().addToQueueAndWait(r);

EDT检测

com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
EDT violation detected!
Rendering frame took too long 344 milliseconds
Rendering frame took too long 156 milliseconds
    at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:404)
    at com.codename1.impl.javase.JavaSEPort.getImageWidth(JavaSEPort.java:3449)
    at com.codename1.ui.Image.getWidth(Image.java:667)
    at com.codename1.ui.EncodedImage.getWidth(EncodedImage.java:471)
    at com.codename1.ui.URLImage$ScaleToFill.adaptImage(URLImage.java:81)
    at com.codename1.ui.URLImage$DownloadCompleted.run(URLImage.java:159)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:103)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:140)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
    at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:404)
    at com.codename1.impl.javase.JavaSEPort.getImageHeight(JavaSEPort.java:3460)
    at com.codename1.ui.Image.getHeight(Image.java:681)
    at com.codename1.ui.Image.scaledLargerRatio(Image.java:877)
EDT violation detected!
    at com.codename1.ui.URLImage$ScaleToFill.adaptImage(URLImage.java:82)
    at com.codename1.ui.URLImage$DownloadCompleted.run(URLImage.java:159)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:103)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:140)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
    at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:404)
    at com.codename1.impl.javase.JavaSEPort.getImageWidth(JavaSEPort.java:3449)
    at com.codename1.ui.Image.getWidth(Image.java:667)
    at com.codename1.ui.Image.scaledLargerRatio(Image.java:878)
    at com.codename1.ui.URLImage$ScaleToFill.adaptImage(URLImage.java:82)
    at com.codename1.ui.URLImage$DownloadCompleted.run(URLImage.java:159)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:103)
EDT violation detected!
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:140)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
    at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:404)
    at com.codename1.impl.javase.JavaSEPort.getImageWidth(JavaSEPort.java:3449)
    at com.codename1.ui.Image.getWidth(Image.java:667)
    at com.codename1.ui.Image.scaledLargerRatio(Image.java:882)
    at com.codename1.ui.URLImage$ScaleToFill.adaptImage(URLImage.java:82)
    at com.codename1.ui.URLImage$DownloadCompleted.run(URLImage.java:159)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:103)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:140)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
    at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:404)
EDT violation detected!
    at com.codename1.impl.javase.JavaSEPort.getImageHeight(JavaSEPort.java:3460)
    at com.codename1.ui.Image.getHeight(Image.java:681)
    at com.codename1.ui.Image.scaledLargerRatio(Image.java:882)
    at com.codename1.ui.URLImage$ScaleToFill.adaptImage(URLImage.java:82)
    at com.codename1.ui.URLImage$DownloadCompleted.run(URLImage.java:159)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:103)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:140)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
    at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:404)
    at com.codename1.impl.javase.JavaSEPort.scale(JavaSEPort.java:3479)
    at com.codename1.ui.Image.scale(Image.java:961)
    at com.codename1.ui.Image.scaledImpl(Image.java:931)
    at com.codename1.ui.Image.scaled(Image.java:896)

最佳答案

那里有很多代码,但不是全部,所以我无法对此发表评论。我确实注意到你每次都关闭网络,这是错误的。您应该只在非常极端的情况下调用关闭。

此异常报告我们的事件队列已完全满。这是一种疯狂的情况,只有在 EDT 保持到位时 native 代码不断发送事件才能达到这种情况。在模拟器中打开 EDT 违规检测工具,它可能会指出实际的违规情况。

要了解有关 EDT 的更多信息,请查看 developer guide .

关于java - EDT 性能非常慢,显示触发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35288964/

相关文章:

Java 启动错误选择不包含主类型

java - 如何从方法返回多个变量?

java - Eclipse 的 Gradle 集成不断更改 .classpath 文件

java - 如何在任何线程上从对话框中获取值?

codenameone - 如何在 codenameone 给定的不活动时间后自动重新加载屏幕(表单)

java - 代号 1 个 GPS 提供商和当前位置

java - [Ljava.lang.String;@输出错误

java - 使用 pdfbox 从输出文本中删除新行

java - 代号一 - Dropbox 2 中的 Json

ios - 代号一 - 导出步骤中的 iOS 构建错误