Le package logiciel enfichable pour l’application Java (Swing et AWT) se bloque lors de son exécution

J’essaie de créer un package d’instantané pour une application Java (Swing et AWT). Il permet de télécharger (et de gérer) automatiquement les papiers peints d’Internet et de les stocker localement. C’est le fichier snapcraft.yaml :

name: wallpaperdownloader version: 2.0 summary: Download and manage your favorite wallpapers fron the Internet description: Wallpaperdownloader is a simple java based application for downloading wallpapers from the Internet confinement: ssortingct apps: wallpaperdownloader: command: java -jar $SNAP/jar/wallpaperdownloader.jar plugs: [x11, network-bind] parts: wallpaperdownloader: plugin: maven source: https://bitbucket.org/eloy_garcia_pca/wallpaperdownloader.git source-type: git 

Je l’ai construit sans aucun problème (à l’aide du plugin Maven) et le paquet logiciel instantané est créé. Ensuite, je l’installe en utilisant l’ option –devmode afin de contourner le confinement (uniquement à des fins de test), mais cela ne fonctionne pas. Il crée un dossier .wallpaperdownloader dans / home / user avec tout le matériel et la configuration nécessaires à son exécution, mais il se bloque avant l’apparition d’une interface graphique. C’est l’exception levée:

 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219) at sun.awt.FontConfiguration.init(FontConfiguration.java:107) at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774) at sun.font.SunFontManager$2.run(SunFontManager.java:431) at java.security.AccessController.doPrivileged(Native Method) at sun.font.SunFontManager.(SunFontManager.java:376) at sun.awt.FcFontManager.(FcFontManager.java:35) at sun.awt.X11FontManager.(X11FontManager.java:57) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83) at java.security.AccessController.doPrivileged(Native Method) at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74) at sun.font.SunFontManager.getInstance(SunFontManager.java:250) at sun.font.FontDesignMesortingcs.getMesortingcs(FontDesignMesortingcs.java:264) at sun.swing.SwingUtilities2.getFontMesortingcs(SwingUtilities2.java:1113) at javax.swing.JComponent.getFontMesortingcs(JComponent.java:1626) at javax.swing.text.PlainView.calculateLongestLine(PlainView.java:639) at javax.swing.text.PlainView.updateMesortingcs(PlainView.java:209) at javax.swing.text.PlainView.updateDamage(PlainView.java:527) at javax.swing.text.PlainView.insertUpdate(PlainView.java:451) at javax.swing.text.FieldView.insertUpdate(FieldView.java:293) at javax.swing.plaf.basic.BasicTextUI$RootView.insertUpdate(BasicTextUI.java:1610) at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.insertUpdate(BasicTextUI.java:1869) at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:201) at javax.swing.text.AbstractDocument.handleInsertSsortingng(AbstractDocument.java:748) at javax.swing.text.AbstractDocument.insertSsortingng(AbstractDocument.java:707) at javax.swing.text.PlainDocument.insertSsortingng(PlainDocument.java:130) at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:669) at javax.swing.text.JTextComponent.setText(JTextComponent.java:1669) at javax.swing.JFormattedTextField$AbstractFormatter.install(JFormattedTextField.java:948) at javax.swing.text.DefaultFormatter.install(DefaultFormatter.java:125) at javax.swing.text.InternationalFormatter.install(InternationalFormatter.java:285) at javax.swing.JFormattedTextField.setFormatter(JFormattedTextField.java:464) at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:788) at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:501) at es.estoes.wallpaperDownloader.window.WallpaperDownloader.initializeGUI(WallpaperDownloader.java:814) at es.estoes.wallpaperDownloader.window.WallpaperDownloader.initialize(WallpaperDownloader.java:426) at es.estoes.wallpaperDownloader.window.WallpaperDownloader.(WallpaperDownloader.java:160) at es.estoes.wallpaperDownloader.window.WallpaperDownloader$1.run(WallpaperDownloader.java:149) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 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:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 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) 

Merci beaucoup pour votre aide.

Remplacer la commande:

 java -jar $SNAP/jar/wallpaperdownloader.jar 

avec run.sh

Voici run.sh :

 #!/bin/sh # Not good, needed for fontconfig export XDG_DATA_HOME=$SNAP/usr/share # Font Config export FONTCONFIG_PATH=$SNAP/etc/fonts/config.d export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf export HOME=$SNAP_USER_DATA java -jar -Duser.home=$SNAP_USER_DATA $SNAP/jar/wallpaperdownloader.jar 

"-Duser.home=$SNAP_USER_DATA" résolu mon problème.

Mise à jour: Visualisez un exemple complet dans le parc Snappy à l’aide d’un lanceur personnalisé pour le démarrage.