Projet Swing export to jar (images pixélisées ?)

Résolu/Fermé
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019 - 10 déc. 2017 à 15:49
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019 - 13 déc. 2017 à 17:38
Bonjour tout le monde,

J'ai un petit problème tout bête surement mais je ne trouve pas la solution.

En fait j'ai un projet SWING qui fonctionne très bien et qui ressemble à cela lorsque je le lance via "Eclipse" :



Et une fois exporter via Eclipse (export -> runnable jar file -> extract librairies....) et une fois mon jar exporté, voici à quoi le programme ressemble :



Comme on peut le voir, la JFrame n'a pas la même taille et on dirait qu'il y a un zoom.. d'où le fait que j'ai l'impression que mes icones (images) ne sont pas nettes et ne sont pas belles.. Bon, certains diront que "ça se voit pas trop" mais pour moi, ça me dérange, c'est pas top..

Avez-vous une idée de pourquoi il y a ce changement ? :(

Merci beaucoup,

Mikis

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
10 déc. 2017 à 16:00
Bonjour,

Il n'y a pas vraiment de raison qu'il y ait des différences, à part si tu as des options supplémentaires dans ton launcher Eclipse qu'il faudrait répercuter dans ton jar, ou alors tout simplement une histoire de version de Java, car dans Eclipse tu utilises le JDK alors qu'avec un jar tu utilises la JRE et que les deux ne sont pas forcément dans la même version.
2
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019
10 déc. 2017 à 16:25
Merci pour votre réponse,

Que pensez-vous que je doive faire afin d'obtenir le même résultat des deux côtés ? Changer Eclipse pour utiliser le JRE ? Ou bien exporter mon projet avec un autre IDE ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019
10 déc. 2017 à 18:42
Il faudrait déjà identifier la différence, savoir si c'est effectivement lié à Eclipse, au JRE, ou autre chose.

En commençant par exemple, par afficher la version de Java que tu lances, ainsi que l'ensembles des options de JVM qui sont implicitement utilisées afin de repérer la différence entre tes deux programmes.

Exemple :

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.lang.reflect.Method;

public class Test {

    public static void main(String[] args) throws Exception {
        RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
        for (Method method : RuntimeMXBean.class.getMethods())
            if (method.getName().startsWith("get"))
                System.out.println(method.getName() + "\t" + method.invoke(runtimeMXBean));
    }
}

Ceci étant dit, ton bug ressemble surtout à un mauvais dimensionnement de la fenêtre au démarrage, il faudrait peut-être juste forcer la taille de la fenêtre en reprenant celles qui te conviennent.
0
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019
11 déc. 2017 à 18:04
"Ceci étant dit, ton bug ressemble surtout à un mauvais dimensionnement de la fenêtre au démarrage, il faudrait peut-être juste forcer la taille de la fenêtre en reprenant celles qui te conviennent."

pack();
setSize(900, 600);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setVisible(true);


Voilà comment est-ce que je choisis la taille de ma fenêtre..

Ensuite, lorsque j'exécute le programme avec le morceau de code que vous m'avez donné, j'obtiens l'output suivant (lancé depuis Eclipse) :


getName 5548@N1415073
getClassPath C:\Program Files\Java\jre1.8.0_151\lib\resources.jar;C:\Program Files\Java\jre1.8.0_151\lib\rt.jar;C:\Program Files\Java\jre1.8.0_151\lib\jsse.jar;C:\Program Files\Java\jre1.8.0_151\lib\jce.jar;C:\Program Files\Java\jre1.8.0_151\lib\charsets.jar;C:\Program Files\Java\jre1.8.0_151\lib\jfr.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\cldrdata.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\dnsns.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\jaccess.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\jfxrt.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\localedata.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\nashorn.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\sunec.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\sunmscapi.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\zipfs.jar;C:\Users\mim\Documents\Coiffeur4\bin;C:\Users\mim\Downloads\jar\ojdbc14.jar.zip;C:\Users\mim\Downloads\jar\mysql-connector.jar;C:\Users\mim\Downloads\jar\jcalendar-1.4.jar
getBootClassPath C:\Program Files\Java\jre1.8.0_151\lib\resources.jar;C:\Program Files\Java\jre1.8.0_151\lib\rt.jar;C:\Program Files\Java\jre1.8.0_151\lib\sunrsasign.jar;C:\Program Files\Java\jre1.8.0_151\lib\jsse.jar;C:\Program Files\Java\jre1.8.0_151\lib\jce.jar;C:\Program Files\Java\jre1.8.0_151\lib\charsets.jar;C:\Program Files\Java\jre1.8.0_151\lib\jfr.jar;C:\Program Files\Java\jre1.8.0_151\classes
getLibraryPath C:\Program Files\Java\jre1.8.0_151\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/Program Files/Java/jre1.8.0_151/bin/server;C:/Program Files/Java/jre1.8.0_151/bin;C:/Program Files/Java/jre1.8.0_151/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Oracle\instantclient_11_2;C:\Program Files\Git\cmd;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Users\mim\Desktop;;.
getUptime 685
getVmName Java HotSpot(TM) 64-Bit Server VM
getVmVendor Oracle Corporation
getVmVersion 25.151-b12
getInputArguments [-Dfile.encoding=Cp1252]
getManagementSpecVersion 1.2
getSpecName Java Virtual Machine Specification
getSpecVendor Oracle Corporation
getSpecVersion 1.8
getStartTime 1513007050115
getSystemProperties {sun.desktop=windows, awt.toolkit=sun.awt.windows.WToolkit, file.encoding.pkg=sun.io, java.specification.version=1.8, sun.cpu.isalist=amd64, sun.jnu.encoding=Cp1252, java.class.path=C:\Program Files\Java\jre1.8.0_151\lib\resources.jar;C:\Program Files\Java\jre1.8.0_151\lib\rt.jar;C:\Program Files\Java\jre1.8.0_151\lib\jsse.jar;C:\Program Files\Java\jre1.8.0_151\lib\jce.jar;C:\Program Files\Java\jre1.8.0_151\lib\charsets.jar;C:\Program Files\Java\jre1.8.0_151\lib\jfr.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\cldrdata.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\dnsns.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\jaccess.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\jfxrt.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\localedata.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\nashorn.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\sunec.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\sunmscapi.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jre1.8.0_151\lib\ext\zipfs.jar;C:\Users\mim\Documents\Coiffeur4\bin;C:\Users\mim\Downloads\jar\ojdbc14.jar.zip;C:\Users\mim\Downloads\jar\mysql-connector.jar;C:\Users\mim\Downloads\jar\jcalendar-1.4.jar, java.vm.vendor=Oracle Corporation, sun.arch.data.model=64, user.variant=, java.vendor.url=http://java.oracle.com/, user.timezone=, user.country.format=BE, os.name=Windows 7, java.vm.specification.version=1.8, user.country=US, sun.java.launcher=SUN_STANDARD, sun.boot.library.path=C:\Program Files\Java\jre1.8.0_151\bin, sun.java.command=main.Main, sun.cpu.endian=little, user.home=C:\Users\mim, user.language=en, java.specification.vendor=Oracle Corporation, java.home=C:\Program Files\Java\jre1.8.0_151, file.separator=\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, java.specification.name=Java Platform API Specification, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, sun.boot.class.path=C:\Program Files\Java\jre1.8.0_151\lib\resources.jar;C:\Program Files\Java\jre1.8.0_151\lib\rt.jar;C:\Program Files\Java\jre1.8.0_151\lib\sunrsasign.jar;C:\Program Files\Java\jre1.8.0_151\lib\jsse.jar;C:\Program Files\Java\jre1.8.0_151\lib\jce.jar;C:\Program Files\Java\jre1.8.0_151\lib\charsets.jar;C:\Program Files\Java\jre1.8.0_151\lib\jfr.jar;C:\Program Files\Java\jre1.8.0_151\classes, user.script=, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, java.runtime.version=1.8.0_151-b12, user.name=mim, path.separator=;, os.version=6.1, java.endorsed.dirs=C:\Program Files\Java\jre1.8.0_151\lib\endorsed, java.runtime.name=Java(TM) SE Runtime Environment, file.encoding=Cp1252, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, java.io.tmpdir=C:\Users\mim\AppData\Local\Temp\, java.version=1.8.0_151, user.dir=C:\Users\mim\Documents\Coiffeur4, os.arch=amd64, java.vm.specification.name=Java Virtual Machine Specification, java.awt.printerjob=sun.awt.windows.WPrinterJob, user.language.format=fr, sun.os.patch.level=Service Pack 1, java.library.path=C:\Program Files\Java\jre1.8.0_151\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/Program Files/Java/jre1.8.0_151/bin/server;C:/Program Files/Java/jre1.8.0_151/bin;C:/Program Files/Java/jre1.8.0_151/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Oracle\instantclient_11_2;C:\Program Files\Git\cmd;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Users\mim\Desktop;;., java.vm.info=mixed mode, java.vendor=Oracle Corporation, java.vm.version=25.151-b12, java.ext.dirs=C:\Program Files\Java\jre1.8.0_151\lib\ext;C:\windows\Sun\Java\lib\ext, sun.io.unicode.encoding=UnicodeLittle, java.class.version=52.0}
getObjectName java.lang:type=Runtime



et l'output lorsque j'exécute mon jar en ligne de commande (java -jar coiffeur.jar)


getName 4364@N1415073
getClassPath coiffeur.jar
getVmName Java HotSpot(TM) 64-Bit Server VM
getVmVendor Oracle Corporation
getVmVersion 9.0.1+11
getSpecName Java Virtual Machine Specification
getSpecVendor Oracle Corporation
getSpecVersion 9
getManagementSpecVersion 1.2
getLibraryPath C:\ProgramData\Oracle\Java\javapath;C:\windows\Sun\Java\bin;C:\w
indows\system32;C:\windows;C:\ProgramData\Oracle\Java\javapath;C:\windows\system
32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.
0\;C:\Oracle\instantclient_11_2;C:\Program Files\Git\cmd;C:\Program Files\MySQL\
MySQL Utilities 1.6\;.
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Nativ
e Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknow
n Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Un
known Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at main.Main.main(Main.java:23)
Caused by: java.lang.UnsupportedOperationException: Boot class path mechanism is
not supported
at java.management/sun.management.RuntimeImpl.getBootClassPath(Unknown S
ource)
... 5 more
getInputArguments []
getUptime 1063
getStartTime 1513006917171
getSystemProperties {sun.desktop=windows, awt.toolkit=sun.awt.windows.WToolk
it, java.specification.version=9, file.encoding.pkg=sun.io, sun.cpu.isalist=amd6
4, sun.jnu.encoding=Cp1252, java.class.path=coiffeur.jar, java.vm.vendor=Oracle
Corporation, sun.arch.data.model=64, user.variant=, java.vendor.url=http://java.
oracle.com/, user.timezone=, user.country.format=BE, os.name=Windows 7, java.vm.
specification.version=9, sun.java.launcher=SUN_STANDARD, user.country=US, sun.bo
ot.library.path=C:\Program Files\Java\jre-9.0.1\bin, sun.java.command=coiffeur.j
ar, jdk.debug=release, sun.cpu.endian=little, user.home=C:\Users\mim, user.langu
age=en, sun.stderr.encoding=cp850, java.specification.vendor=Oracle Corporation,
java.home=C:\Program Files\Java\jre-9.0.1, file.separator=\, java.vm.compressed
OopsMode=32-bit, line.separator=
, sun.stdout.encoding=cp850, java.specification.name=Java Platform API Specifica
tion, java.vm.specification.vendor=Oracle Corporation, java.awt.graphicsenv=sun.
awt.Win32GraphicsEnvironment, user.script=, sun.management.compiler=HotSpot 64-B
it Tiered Compilers, java.runtime.version=9.0.1+11, user.name=mim, path.separato
r=;, os.version=6.1, java.runtime.name=Java(TM) SE Runtime Environment, file.enc
oding=Cp1252, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, java.vendor.url.bu
g=http://bugreport.java.com/bugreport/, java.io.tmpdir=C:\Users\mim\AppData\Loca
l\Temp\, java.version=9.0.1, user.dir=C:\Users\mim\Downloads, os.arch=amd64, jav
a.vm.specification.name=Java Virtual Machine Specification, java.awt.printerjob=
sun.awt.windows.WPrinterJob, user.language.format=fr, sun.os.patch.level=Service
Pack 1, java.library.path=C:\ProgramData\Oracle\Java\javapath;C:\windows\Sun\Ja
va\bin;C:\windows\system32;C:\windows;C:\ProgramData\Oracle\Java\javapath;C:\win
dows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPow
erShell\v1.0\;C:\Oracle\instantclient_11_2;C:\Program Files\Git\cmd;C:\Program F
iles\MySQL\MySQL Utilities 1.6\;., java.vm.info=mixed mode, java.vendor=Oracle C
orporation, java.vm.version=9.0.1+11, sun.io.unicode.encoding=UnicodeLittle, jav
a.class.version=53.0}
getObjectName java.lang:type=Runtime


D'après vous, où est ce que je dois regarder ? Car un gros texte comme cela ne me dit absolument rien..

Merci pour votre aide :)
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019
11 déc. 2017 à 18:37
La première chose flagrante quand on compare les deux c'est que tu as Eclipse en Java 1.8.0_151 et ta ligne de commande en Java 9.0.1

Donc le problème vient de Java 9, a priori ce n'est pas un bug, c'est volontaire :
https://bugs.openjdk.java.net/browse/JDK-8055212

Tu peux essayer ce contournement : https://stackoverflow.com/questions/43057457/jdk-9-high-dpi-disable-for-specific-panel

Remarque : depuis Java 8 (et donc 9 aussi), l'API officielle pour faire des applications de bureau c'est Java FX, on peut encore utiliser AWT/Swing mais il n'y aura plus d'évolutions dessus.
0
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019
Modifié le 11 déc. 2017 à 19:35
Merci pour votre réponse.

Je ne pourrai pas essayer de régler le soucis pour l'instant mais très bientôt pour vous tenir au courant.

Une autre question, puisque vous me dites que maintenant, c'est Java FX qui est utilisé pour faire des applications de bureau. Est-ce très différents de Swing ? Est-ce que c'est plus "beau" visuellement ?Quelles sont les différences principales ?

EDIT : Est-ce possible de forcer mon jar à s'executer avec une version moins récente de java ? Sachant que je ne sais pas ce qu'il y aura comme version de java sur le pc "client".. ou comment transformer mon programme java en une application utilisable sur n'importe quel ordinateur ?

Merci encore.
0
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019
13 déc. 2017 à 17:38
Rebonjour, je me suis permis de reouvrir le poste car je ne sais pas résoudre mon problème ..

Comme KX a expliqué, c'est bien un problème provenant du jdk supérieur à 8.

Néanmoins, je pensais qu'en passant sur une application javafx, je n aurai plus le problème d'affichage flou/incorrect.
J'ai fait une petite application javafx (sur éclipse en configurant le projet ppour utiliser le jdk 9) et le problème est toujours le même.

Que pensez-vous que je puisse faire ? Car je suis totalement perdu actuellement ..

Merci pour vos réponses,

Mikis
0