Странное нарушение EDT, не содержащее мой код - PullRequest
0 голосов
/ 05 ноября 2018

В симуляторе отображается стековая трасса, которую я могу воспроизвести, используя следующую тривиальную форму

public class EdtProblemForm extends Form {
    public EdtProblemForm() {
        setLayout(new TextModeLayout(2, 1));
        add(firstName);
        add(lastName);
    }

    private final TextComponent firstName = new TextComponent().label("First Name");
    private final TextComponent lastName = new TextComponent().label("Last Name");
}

Все, что нужно, это щелкнуть в первом поле и перейти к следующему с помощью клавиши TAB (нажатие приводит к отсутствию трассировки стека).

Мой обработчик не существует, я не запускал и не использовал поток, и трассировка стека также не упоминает меня:

com.codename1.impl.javase.JavaSEPort$EDTViolation: EDT Violation Stack!
    at com.codename1.impl.javase.JavaSEPort.checkEDT(JavaSEPort.java:772)
    at com.codename1.impl.javase.JavaSEPort.editString(JavaSEPort.java:4412)
    at com.codename1.impl.javase.JavaSEPort$56.run(JavaSEPort.java:4397)
    at com.codename1.impl.javase.JavaSEPort$2Listener.actionPerformed(JavaSEPort.java:4620)
    at com.codename1.impl.javase.JavaSEPort$2Listener.endEditing(JavaSEPort.java:4718)
    at com.codename1.impl.javase.JavaSEPort$2Listener$3.run(JavaSEPort.java:4712)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    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)

Это происходит всегда, и я спрашиваю, нужно ли мне это пережить или что-то исправить или избежать.

1 Ответ

0 голосов
/ 05 ноября 2018

Это произойдет только на симуляторе, так как это нарушение EDT при обработке ключа TAB. Иногда мы нарушаем EDT относительно безопасными способами, чтобы сохранить производительность на месте. К сожалению, это создает журнал нарушений EDT.

Мы бы предпочли иметь "ложный положительный результат", такой как этот, но также уловить реальные проблемы на случай, если вы столкнетесь с ними. Так что, если ваш код не задействован, это, вероятно, не проблема.

...