Ввод текста в JavaFX TextField замораживает приложение - PullRequest
0 голосов
/ 13 июня 2018

в нашем приложении JavaFX разные клиенты более или менее время от времени получают следующую ошибку при вводе текста в TextField.В результате инфраструктура рендеринга, кажется, сталкивается с бесконечным циклом, в котором приведенная ниже ошибка неоднократно печатается в системной консоли.Оттуда приложение полностью зависает, должно быть убито и перезапущено, что является полным демонстрационным ходом для этих клиентов.

Проблемы с потоками (Fx и рабочие потоки) не связаны с этим местом.

ошибка возникает в Windows 7 и 10, Java 1.8.0_171, но, насколько я помню, она возникла и в предыдущих версиях Java:

Exception in thread "JavaFX Application Thread"
java.lang.ArrayIndexOutOfBoundsException: -1
            at java.util.ArrayList.elementData(Unknown Source)
            at java.util.ArrayList.get(Unknown Source)
            at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89)
            at com.sun.javafx.collections.VetoableListDecorator.get(VetoableListDecorator.java:306)
            at javafx.scene.Parent.updateCachedBounds(Parent.java:1591)
            at javafx.scene.Parent.recomputeBounds(Parent.java:1535)
            at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388)
            at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078)
            at javafx.scene.Node.updateGeomBounds(Node.java:3579)
            at javafx.scene.Node.getGeomBounds(Node.java:3532)
            at javafx.scene.Node.computeLocalBounds(Node.java:3595)
            at javafx.scene.Node.updateLocalBounds(Node.java:3625)
            at javafx.scene.Node.getLocalBounds(Node.java:3486)
            at javafx.scene.Node.updateTxBounds(Node.java:3643)
            at javafx.scene.Node.getTransformedBounds(Node.java:3426)
            at javafx.scene.Node.updateBounds(Node.java:559)
            at javafx.scene.Parent.updateBounds(Parent.java:1719)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Parent.updateBounds(Parent.java:1717)
            at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2404)
            at com.sun.javafx.tk.Toolkit.lambda$runPulse$29(Toolkit.java:398)
            at java.security.AccessController.doPrivileged(Native Method)
            at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:397)
            at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:424)
            at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:518)
            at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:498)
            at com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:491)
            at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$403(QuantumToolkit.java:319)
            at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
            at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
            at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
            at java.lang.Thread.run(Unknown Source)

Для меня это явно ошибка программирования в Parent.java:1591, так как оставшиесяDirtyNodes кажутсяне синхронизироваться со списком dirtyNodes, но не выполняется проверка границ для dirtyNodes, что вызывает исключение ArrayIndexOutOfBoundsException.

Есть ли какое-либо решение для этого?

Спасибо, Питер

PS: Кроме того, JavaFX работает очень стабильно, и с ним интересно работать.

1 Ответ

0 голосов
/ 13 июня 2018

Это ошибка, связанная с «удалением узла из графа сцены»

Это все еще без исправления, запланированного к выпуску в Open JFX 11. Я не уверен, когда вы можете ожидать релиз,поскольку JavaFX отделяется от JDK, и эта проблема открыта уже два года.

Билет включает в себя минимальный пример, поэтому, вероятно, лучшее, на что вы можете надеяться, - это найти корреляцию в том, как выманипулировать графиком сцены и обойти проблему.

См .: https://bugs.openjdk.java.net/browse/JDK-8163078

...