... the user friendly GPS tool


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
NPE beim Öffnen-Dialog
#1
Hallo Christian,

wenn man in der aktuellen Vorabversion beim Öffnen-Dialog auf den Button "Desktop" klickt, dann kommt es zu einer Exception und der Dialog ist nicht mehr bedienbar.
Das Gleiche passiert, wenn man normal zum Desktop-Verzeichnis navigiert (also über C - Users - <Username> - Desktop).

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.awt.Image.getWidth(java.awt.image.ImageObserver)" because "<local6>" is null
        at java.desktop/sun.awt.shell.Win32ShellFolder2$MultiResolutionIconImage.getResolutionVariant(Unknown Source)
        at java.desktop/sun.awt.shell.Win32ShellFolder2$MultiResolutionIconImage.getBaseImage(Unknown Source)
        at java.desktop/java.awt.image.AbstractMultiResolutionImage.getProperty(Unknown Source)
        at java.desktop/javax.swing.ImageIcon.<init>(Unknown Source)
        at java.desktop/javax.swing.ImageIcon.<init>(Unknown Source)
        at java.desktop/javax.swing.filechooser.FileSystemView.getSystemIcon(Unknown Source)
        at java.desktop/com.sun.java.swing.plaf.windows.WindowsFileChooserUI$WindowsFileView.getIcon(Unknown Source)
        at java.desktop/javax.swing.JFileChooser.getIcon(Unknown Source)
        at java.desktop/sun.swing.FilePane$FileRenderer.getListCellRendererComponent(Unknown Source)
        at java.desktop/javax.swing.plaf.basic.BasicListUI.updateLayoutState(Unknown Source)
        at java.desktop/javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(Unknown Source)
        at java.desktop/javax.swing.plaf.basic.BasicListUI.paintImpl(Unknown Source)
        at java.desktop/javax.swing.plaf.basic.BasicListUI.paint(Unknown Source)
        at java.desktop/javax.swing.plaf.ComponentUI.update(Unknown Source)
        at java.desktop/javax.swing.JComponent.paintComponent(Unknown Source)
        at java.desktop/javax.swing.JComponent.paint(Unknown Source)
        at java.desktop/javax.swing.JComponent.paintToOffscreen(Unknown Source)
        at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(Unknown Source)
        at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
        at java.desktop/javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
        at java.desktop/javax.swing.RepaintManager.paint(Unknown Source)
        at java.desktop/javax.swing.JComponent._paintImmediately(Unknown Source)
        at java.desktop/javax.swing.JComponent.paintImmediately(Unknown Source)
        at java.desktop/javax.swing.RepaintManager$4.run(Unknown Source)
        at java.desktop/javax.swing.RepaintManager$4.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
        at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.desktop/java.awt.WaitDispatchSupport$2.run(Unknown Source)
        at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source)
        at java.desktop/java.awt.WaitDispatchSupport$4.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.desktop/java.awt.WaitDispatchSupport.enter(Unknown Source)
        at java.desktop/java.awt.Dialog.show(Unknown Source)
        at java.desktop/javax.swing.JFileChooser.showDialog(Unknown Source)
        at java.desktop/javax.swing.JFileChooser.showOpenDialog(Unknown Source)
        at slash.navigation.converter.gui.panels.ConvertPanel.openFile(ConvertPanel.java:469)
        at slash.navigation.converter.gui.actions.OpenAction.run(OpenAction.java:42)
        at slash.navigation.gui.actions.FrameAction.actionPerformed(FrameAction.java:51)
        at slash.navigation.gui.actions.ActionManager.perform(ActionManager.java:130)
        at slash.navigation.gui.actions.ActionManager$ProxyAction.actionPerformed(ActionManager.java:201)
        at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at java.desktop/javax.swing.AbstractButton.doClick(Unknown Source)
        at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
        at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
        at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
        at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.desktop/java.awt.Component.processEvent(Unknown Source)
        at java.desktop/java.awt.Container.processEvent(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

Gruß
Thomas
Reply
#2
(28.10.2023, 14:45)lundefugl Wrote: wenn man in der aktuellen Vorabversion beim Öffnen-Dialog auf den Button "Desktop" klickt, dann kommt es zu einer Exception und der Dialog ist nicht mehr bedienbar.
Das Gleiche passiert, wenn man normal zum Desktop-Verzeichnis navigiert (also über C - Users - <Username> - Desktop).

Hallo Thomas,

mußte erstmal wieder meine Windows VM herauspopeln: da tritt keine NullPointerException auf.

Es liegt wahrscheinlich an Deiner Windows-Installation:
  • Welche Windows-Version benutzt Du?
  • Welche Java-Distribution und -Version benutzt Du?
  • Hat das Laufwerk C: oder der Desktop bei Dir ein Nicht-Standard-Icon?

Im Code gibt es bereits 2 Workarounds für Bugs in Java-Versionen:
https://github.com/cpesch/RouteConverter...54-L103C54

Und ein Bug in OpenJDK 20, der in 21 gefixt wurde:
https://bugs.openjdk.org/browse/JDK-8293862

Leider kein Workaround...

Ich hoffe, das hilft?
--
Christian
Reply
#3
Hallo Christian,

sorry, dass ich erst jetzt antworten kann. Ich hatte da so viel um die Ohren, dass ich das Problemchen ganz vergessen hatte.

Das Problem tritt mit dem aktuellen Prerelease immer noch auf.
Meine Umgebung ist:
- Windows 10 (mit den neusten Updates)
- Adoptium Java 21 (Temurin-21+35 (build 21+35-LTS)) und auch nach dem Update auf das neuste Temurin-21.0.1+12 (build 21.0.1+12-LTS)

An irgendwelchen Icons habe ich nicht geschraubt und im Explorer sieht auch alles OK aus.
Aber stecke nicht zu viel Zeit in die Fehlersuche. Ich hatte es nur gemeldet, weil ich dachte, dass das eine Kleinigkeit von Java ist. Wir haben bei uns in der Firma auch gerade ein Facelift bei einer Java-Anwendung gemacht, bei der wir die ganzen eigenen Look&Feel-Klassen teilweise neu gemacht haben. Und dabei kam es auch zu solchen Effekten (NPEs), weil für den FileChooser einige Properties nicht gesetzt waren.

Es gibt ja einen guten Workaround. Man speichert nicht direkt oder unterhalb vom Desktop. Dann geht alles.

Viele Grüße und schöne Feiertage
Thomas
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)