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

Résolu
mikis69 Messages postés 174 Statut Membre -  
mikis69 Messages postés 174 Statut Membre -
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

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. mikis69 Messages postés 174 Statut Membre
       
      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
    2. KX Messages postés 19031 Statut Modérateur 3 020 > mikis69 Messages postés 174 Statut Membre
       
      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
    3. mikis69 Messages postés 174 Statut Membre
       
      "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
    4. KX Messages postés 19031 Statut Modérateur 3 020 > mikis69 Messages postés 174 Statut Membre
       
      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
    5. mikis69 Messages postés 174 Statut Membre
       
      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
  2. mikis69 Messages postés 174 Statut Membre
     
    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