- État Fermée
- Pourcentage achevé
- Type Bug
- Catégorie Application
-
Assignée à
DevTeam - Système d'exploitation Windows
- Sévérité Critique
- Priorité Très haute
- Basée sur la version 17.8
- Due pour la version 18.1
-
Échéance
Non décidée
- Votes
- Privée
Ouverte par DevTeam - 2017-10-03
Dernière modification par DevTeam - 2018-03-21
FS#1388 - Bug Java 9 : java.lang.NullPointerException @ java.desktop/sun.print.RasterPrinterJob.setAttributes
Nécessite un correctif de Java 9 et/ou du pilote d'impression
CE PROBLEME NECESSITE UN CORRECTIF DE JAVA 9 : CE CORRECTIF EST ATTENDU DE LA PART DE ORACLE (l’éditeur de Java)
Selon le ticket JDK-8186987 (https://bugs.openjdk.java.net/browse/JDK-8186987), un correctif est prévue par l’équipe JDK est planifiée pour Java 10 (http://openjdk.java.net/projects/jdk/10/)à paraitre en mars 2018. Ceci reporte ce correctif à BeDesk 18.
Attente de résolution tiers.
Contournement du problème
Pour contourner ce souci, utiliser le nouveau module d’impression via l’application PDF par défaut du système (voir Options/Système/Paramètres Système/Module d’impression).
https://guide.bedesk-express.com/faq:select_desktop_printer_job
Descriptif du problème
Avec Java 9 et certains modèles d’imprimante, lorsqu’on essaye d’imprimer un document sur Windows, rien ne se passe.
Liste des modèles d'imprimante affectés par le souci que nous avons répertorié:
- Brother MFC-8520DN (confirmé)
- Brother MFC-9140CDN (confirmé)
- Brother DCP-9055CDN (confirmé)
- Brother MFC-9460 (confirmé)
- Brother MFC-9330 (non confirmé)
- Brother DCP-7055 (confirmé)
- Brother HL-4150CDN (confirmé)
- HP Officejet Pro 6830 (non confirmé - peut-être un faux positif)
- HP Photosmart 5520 (confirmé - via USB)
Journal de débogage
Lorsqu’on examine le journal de débogage, on trouve par exemple ceci:
AUTO-CONFIGURATION> RECHERCHE DE LA FILE D'IMPRESSION PAR DEFAUT... PATIENTEZ... AUTO-CONFIGURATION> FILE D'IMPRESSION TROUVEE : Java Printing sur Brother MFC-8520DN Printer ACCUEIL1... Before Attributes: media-printable-area = (25.4,25.4)->(159.102,246.238)mm[javax.print.attribute.standard.MediaPrintableArea] media = iso-a4[javax.print.attribute.standard.MediaSizeName] Utilisation de l'ancien systeme d'impression... [ignorer le selecteur] Service non trouve ... Tentative du 2ieme type... Avons-nous de la chance?... MainWindow Activated... Service d'impression disponible Brother MFC-8520DN Printer ACCUEIL1 setPrintService... Print to:Brother MFC-8520DN Printer ACCUEIL1 Attributes: media-printable-area = (25.4,25.4)->(159.102,246.238)mm[javax.print.attribute.standard.MediaPrintableArea] media = iso-a4[javax.print.attribute.standard.MediaSizeName] MyPrintServiceUI.getPaper - PrintableArea :(25.4,25.4)->(159.102,246.238)mm :X,Y = (72.0,72.0) lpi :W,H = (450.997802734375,697.9974975585938) lpi MyPrintServiceUI.getPaper - Media Size :iso-a4 :210.0x297.0 mm :595.2755737304688x841.8897705078125 lpi MyPrintServiceUI.getPaper - PrintableArea :(25.4,25.4)->(159.102,246.238)mm :X,Y = (72.0,72.0) lpi :W,H = (450.997802734375,697.9974975585938) lpi MyPrintServiceUI.getPaper - Media Size :iso-a4 :210.0x297.0 mm :595.2755737304688x841.8897705078125 lpi HTMLDOC *** AutoCheckFontSize patching font size 6 -> 7 *** <#> Report length : 5130 <#> Report created in 292ms... HTMLDOC *** AutoCheckFontSize patching font size 10 -> 11 *** HTMLDOC *** AutoCheckFontSize patching font size 6 -> 7 *** CREATE PageClassicHeaderImage : javax.swing.ImageIcon@74d65d9e Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at java.desktop/sun.print.RasterPrinterJob.setAttributes(Unknown Source) at java.desktop/sun.awt.windows.WPrinterJob.setAttributes(Unknown Source) at java.desktop/sun.print.RasterPrinterJob.print(Unknown Source) at bedesk._MainApp.factIconsBar_imprimeFact_actionPerformed(_MainApp.java:2866) at bedesk.AppAction.printDocument(AppAction.java:264) at bedesk.ui.iconsbar.document.DocumentsIconsBar$3.actionPerformed(DocumentsIconsBar.java:106) 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.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) at java.desktop/java.awt.AWTEventMulticaster.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.access$500(Unknown Source) at java.desktop/java.awt.EventQueue$3.run(Unknown Source) at java.desktop/java.awt.EventQueue$3.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Native Method) 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$4.run(Unknown Source) at java.desktop/java.awt.EventQueue$4.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Native Method) 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)
La partie qui est la plus intéressante est celle-ci:
java.lang.NullPointerException at java.desktop/sun.print.RasterPrinterJob.setAttributes(Unknown Source) at java.desktop/sun.awt.windows.WPrinterJob.setAttributes(Unknown Source) at java.desktop/sun.print.RasterPrinterJob.print(Unknown Source) at bedesk._MainApp.factIconsBar_imprimeFact_actionPerformed(_MainApp.java:2866)
Le problème n’est pas directement dans le logiciel BeDesk. Il s’agit d’un bug de Java 9.
Description du bug JDK-8186987 : https://bugs.openjdk.java.net/browse/JDK-8186987
Ce problème a été rectifié dans l’OpenJDK le 21 septembre dernier, mais Oracle n’a pas encore reporté le correctif dans le Java 9 officiel.
Il semble que le pilote d’impression ne donne pas toujours les informations de résolution (la densité des points par pouce). Du coup, là où les informations devraient se trouver, il y a un pointeur NULL. D’où l’erreur.
Comme décrit par le BTS d’OpenJDK, il serait possible de contourner le souci en forçant la résolution de base (300dpi) en cas d’absence de l’objet PrinterResolution.
A rechercher et tester...
Tentative de contournement du problème à l’aide d’un wrapper qui enveloppe les PrintService retournés par le système. Ce wrapper PatchedPrintService détecte et corrige les attributs erronés ou manquant.
Tests nécessaires...
Malgré le Patch on continue avec :
CREATE PageClassicHeaderImage : javax.swing.ImageIcon@730a4a8c log> PatchedPrintService.getDefaultAttributeValue(javax.print.attribute.standard.JobSheets) Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at java.desktop/sun.print.RasterPrinterJob.setAttributes(Unknown Source) at java.desktop/sun.awt.windows.WPrinterJob.setAttributes(Unknown Source) at java.desktop/sun.print.RasterPrinterJob.print(Unknown Source) at java.desktop/sun.print.Win32PrintJob.pageableJob(Unknown Source) at java.desktop/sun.print.Win32PrintJob.print(Unknown Source) at java.desktop/sun.print.RasterPrinterJob.spoolToService(Unknown Source) at java.desktop/sun.print.RasterPrinterJob.print(Unknown Source) at bedesk._MainApp.factIconsBar_imprimeFact_actionPerformed(_MainApp.java:2866)
Or le patch fonctionne bien:
log> PatchedPrintService.getDefaultAttributeValue(javax.print.attribute.standard.PrinterResolution) PatchedPrintService : NULL javax.print.attribute.standard.PrinterResolution PatchedPrintService : PATCHING javax.print.attribute.standard.PrinterResolution = 30000x30000 dphi - printer-resolution = 30000x30000 dphi [javax.print.attribute.standard.PrinterResolution]
Nouvel essai sur un poste affecté à l’aide du JDK:
CREATE PageClassicHeaderImage : javax.swing.ImageIcon@2ca36e49 log> PatchedPrintService.getDefaultAttributeValue(javax.print.attribute.standard.JobSheets) Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at java.desktop/sun.print.RasterPrinterJob.setAttributes(RasterPrinterJob.java:1240) at java.desktop/sun.awt.windows.WPrinterJob.setAttributes(WPrinterJob.java:696) at java.desktop/sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1510) at java.desktop/sun.print.Win32PrintJob.pageableJob(Win32PrintJob.java:573) at java.desktop/sun.print.Win32PrintJob.print(Win32PrintJob.java:390) at java.desktop/sun.print.RasterPrinterJob.spoolToService(RasterPrinterJob.java:1428) at java.desktop/sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1516) at bedesk._MainApp.factIconsBar_imprimeFact_actionPerformed(_MainApp.java:2866) at bedesk.AppAction.printDocument(AppAction.java:264) at bedesk.ui.iconsbar.document.DocumentsIconsBar$3.actionPerformed(DocumentsIconsBar.java:106) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405) at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:269) at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297) at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6578) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3343) at java.desktop/java.awt.Component.processEvent(Component.java:6343) at java.desktop/java.awt.Container.processEvent(Container.java:2259) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4961) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2317) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4793) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4539) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4480) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2303) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2758) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4793) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766) at java.desktop/java.awt.EventQueue.access$500(EventQueue.java:97) at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:717) at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:711) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:89) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:99) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:739) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:737) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:89) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:736) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:199) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
ID | Projet | Résumé | Priorité | Sévérité | Progression | |
---|---|---|---|---|---|---|
1899 | BeDesk-Express | Moyenne | Basse |
ID | Projet | Résumé | Priorité | Sévérité | Progression | |
---|---|---|---|---|---|---|
1390 | BeDesk-Express | Très haute | Critique |