Ошибка в JDK 9+ в Linux: StackOverflowError в графикеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка в JDK 9+ в Linux: StackOverflowError в графике

Сообщение Anonymous »

Наше Java-приложение на основе AWT часто выдает ошибку StackOverflowError в JDK Ubuntu Linux с 11 по 23 (но потоко-стохастически). См. три примера трассировки стека ниже. Предложения или сочувствие? Мы частично смягчили эту проблему, вынеся функцию validate() компонентов в отдельный поток, чтобы AWT EventQueue не зависал. Мы подозреваем ошибку в самой Java. (Наше приложение было создано в 1997 году, имеет >>200 тыс. строк и не будет преобразовано в Swing. Прекрасно работает с JDK 8–23 для macOS, Windows и JDK 8 в Linux.)

Код: Выделить всё

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.desktop/javax.swing.text.View.getContainer(View.java:1014)
at java.desktop/javax.swing.text.WrappedPlainView.updateMetrics(WrappedPlainView.java:442)
at java.desktop/javax.swing.text.WrappedPlainView.getPreferredSpan(WrappedPlainView.java:540)
at java.desktop/javax.swing.plaf.basic.BasicTextUI$RootView.getPreferredSpan(BasicTextUI.java:1454)
at java.desktop/javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:950)
at java.desktop/javax.swing.plaf.basic.BasicTextAreaUI.getPreferredSize(BasicTextAreaUI.java:121)
at java.desktop/javax.swing.JComponent.getPreferredSize(JComponent.java:1734)
at java.desktop/javax.swing.JTextArea.getPreferredSize(JTextArea.java:623)
at java.desktop/javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:799)
at java.desktop/java.awt.Container.layout(Container.java:1541)
at java.desktop/java.awt.Container.doLayout(Container.java:1530)
at java.desktop/java.awt.Container.validateTree(Container.java:1725)
at java.desktop/java.awt.Container.validate(Container.java:1660)
at java.desktop/sun.awt.X11.XTextAreaPeer.setFont(XTextAreaPeer.java:392)
at java.desktop/java.awt.Component.validate(Component.java:2988)
at java.desktop/java.awt.Container.validateTree(Container.java:1743)
at java.desktop/java.awt.Container.validate(Container.java:1660)
at java.desktop/sun.awt.X11.XTextAreaPeer.setFont(XTextAreaPeer.java:392)
at java.desktop/java.awt.Component.validate(Component.java:2988)
at java.desktop/java.awt.Container.validateTree(Container.java:1743)
at java.desktop/java.awt.Container.validate(Container.java:1660)
at java.desktop/sun.awt.X11.XTextAreaPeer.setFont(XTextAreaPeer.java:392)
at java.desktop/java.awt.Component.validate(Component.java:2988)
at java.desktop/java.awt.Container.validateTree(Container.java:1743)
и т. д....

Код: Выделить всё

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.base/java.util.HashMap.hash(HashMap.java:338)
at java.base/java.util.HashMap.getNode(HashMap.java:576)
at java.base/java.util.HashMap.get(HashMap.java:564)
at java.desktop/sun.swing.SwingUtilities2.getFRCFromCache(SwingUtilities2.java:1281)
at java.desktop/sun.swing.SwingUtilities2.getFRCProperty(SwingUtilities2.java:1255)
at java.desktop/sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:1238)
at java.desktop/javax.swing.JComponent.getFontMetrics(JComponent.java:1700)
at java.desktop/javax.swing.text.WrappedPlainView.updateMetrics(WrappedPlainView.java:444)
at java.desktop/javax.swing.text.WrappedPlainView.getPreferredSpan(WrappedPlainView.java:540)
at java.desktop/javax.swing.plaf.basic.BasicTextUI$RootView.getPreferredSpan(BasicTextUI.java:1454)
at java.desktop/javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:950)
at java.desktop/javax.swing.plaf.basic.BasicTextAreaUI.getPreferredSize(BasicTextAreaUI.java:121)
at java.desktop/javax.swing.JComponent.getPreferredSize(JComponent.java:1734)
at java.desktop/javax.swing.JTextArea.getPreferredSize(JTextArea.java:623)
at java.desktop/javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:799)
at java.desktop/java.awt.Container.layout(Container.java:1541)
at java.desktop/java.awt.Container.doLayout(Container.java:1530)
at java.desktop/java.awt.Container.validateTree(Container.java:1725)
at java.desktop/java.awt.Container.validate(Container.java:1660)
а затем бесконечный цикл, как указано выше....

Код: Выделить всё

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.desktop/javax.swing.border.AbstractBorder.getBorderInsets(AbstractBorder.java:80)
at java.desktop/javax.swing.JComponent.getInsets(JComponent.java:1894)
at java.desktop/javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:935)
at java.desktop/javax.swing.plaf.basic.BasicTextAreaUI.getPreferredSize(BasicTextAreaUI.java:121)
at java.desktop/javax.swing.JComponent.getPreferredSize(JComponent.java:1734)
at java.desktop/javax.swing.JTextArea.getPreferredSize(JTextArea.java:623)
at java.desktop/javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:799)
at java.desktop/java.awt.Container.layout(Container.java:1541)
at java.desktop/java.awt.Container.doLayout(Container.java:1530)
at java.desktop/java.awt.Container.validateTree(Container.java:1725)
at java.desktop/java.awt.Container.validate(Container.java:1660)
а затем бесконечный цикл, как указано выше....

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-graphics
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»