Comment charger une image ?

Comment charger une image ? - Java - Programmation

Marsh Posté le 20-04-2023 à 11:13:31    

Salut !

 

Pour mettre une icone, sur ma précédente app je fais

 
Code :
  1. try{    // changer l'icone de la fenetre (fenetre et barre des taches)
  2.            URL url2 = getClass().getResource("/MediaFilesVR/settings.png" );
  3.            Image icone = Toolkit.getDefaultToolkit().getImage(url2);
  4.            setIconImage(icone);
  5.        }

et ça fonctionne

 

Mais sur mon app que je dev actuellement ça ne marche pas du tout, peu importe ou je mette mon dossier MediaFilesVR.

 

L'arborescence de mon app actuelle où ça marche pas :
https://i.imgur.com/T77YosV.png

 

Mon app ou ça marche :
https://i.imgur.com/lKmcksj.png

 

Avez vous une idée ?  L'erreur c'est "Cannot invoke "java.net.URL.toString()" because "url" is null"

 

Et impossible de "mark directory as resource" l'option n'apparait pas, j'ai uniquement "Excluded" comme choix

 

Merci d'avance c'est un véritable enfer


Message édité par Lt Ripley le 20-04-2023 à 17:33:22

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 20-04-2023 à 11:13:31   

Reply

Marsh Posté le 20-04-2023 à 18:08:27    

Dans un projet style Maven tu mets tes ressources dans src/main/resources et src/test/resources respectivement.
L'outil de build devrait les copier à la racine du classpath et ton bout de code devrait fonctionner.


Message édité par DDT le 20-04-2023 à 20:15:16

---------------
click clack clunka thunk
Reply

Marsh Posté le 20-04-2023 à 18:58:20    

Super ça fonctionne niquel, j'ai fait ensuite un petit clic droit sur le dossier puis "mark as resource root"
 
Puis le chemin c'est /monFichier
 
(le projet est sous gradle)
 
Merci beaucoup !!!
 
Question subsidiaire : si je crée un runnable .jar ça ne fonctionne plus : url is null
 
C'est un truc de fou


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 20-04-2023 à 19:21:46    

Lt Ripley a écrit :

C'est un truc de fou

Bah c'est du Java. :o
 
Pardon, je sors. :o

Reply

Marsh Posté le 20-04-2023 à 20:14:20    

Montre ton build.gradle?

 

Je connais pas bien Gradle mais je viens de tester et le plugin application copie bien les ressources dans le .jar ici.


Message édité par DDT le 20-04-2023 à 20:15:21

---------------
click clack clunka thunk
Reply

Marsh Posté le 20-04-2023 à 20:41:10    

https://i.imgur.com/9vH8S4z.png
 
J'ai essayé en ajoutant ça, sans succès :
 
sourceSets {
    main {
        resources {
            srcDirs = ["src/main/resources"]
        }
    }
}
 
jar {
    from sourceSets.main.resources
}


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 20-04-2023 à 22:45:06    

Même sans le plugin application ça marche pour moi.
 


.
├── build
│  └── ...
├── build.gradle.kts
├── gradle
│  └── ...
├── settings.gradle.kts
└── src
   ├── main
   │  ├── java
   │  │  └── org
   │  │     └── example
   │  │        ├── Hello.java
   │  │        └── Main.java
   │  └── resources
   │     └── hello.txt
   └── test
      ├── java
      └── resources


 
build.gradle.kts

Code :
  1. plugins {
  2.     id("java" )
  3. }
  4. group = "org.example"
  5. version = "1.0-SNAPSHOT"
  6. java {
  7.     sourceCompatibility = JavaVersion.VERSION_17
  8. }
  9. tasks.withType<Jar> {
  10.     manifest {
  11.         attributes["Main-Class"] = "org.example.Main"
  12.     }
  13. }
  14. repositories {
  15.     mavenCentral()
  16. }
  17. dependencies {
  18.     testImplementation(platform("org.junit:junit-bom:5.9.1" ))
  19.     testImplementation("org.junit.jupiter:junit-jupiter" )
  20. }
  21. tasks.test {
  22.     useJUnitPlatform()
  23. }


 


$ gradle jar
...
$ jar -tvf build/libs/gradle-java-1.0-SNAPSHOT.jar


 

Citation :


     0 Thu Apr 20 22:41:34 CEST 2023 META-INF/
    25 Thu Apr 20 22:41:34 CEST 2023 META-INF/MANIFEST.MF
     0 Thu Apr 20 22:41:34 CEST 2023 org/
     0 Thu Apr 20 22:41:34 CEST 2023 org/example/
   975 Thu Apr 20 22:41:34 CEST 2023 org/example/Hello.class
   644 Thu Apr 20 22:41:34 CEST 2023 org/example/Main.class
   13 Thu Apr 20 22:41:34 CEST 2023 hello.txt


Message édité par DDT le 21-04-2023 à 10:10:18

---------------
click clack clunka thunk
Reply

Marsh Posté le 21-04-2023 à 12:34:31    

J'y suis arrivé en ajoutant le dossier resources dans project structures / artifacts / output layout / + / directory content (j'y croyais plus nom de diou)

 

Merci DDT pour l'indication du dossier src/main/resources !

 


rat de combat a écrit :

Bah c'est du Java. :o

 

Pardon, je sors. :o

A chaque appli que je fais, pour inclure un fichier dans le jar c'est l'enfer :cry:

 


Je peux vous dire que je vais noter toute la procédure avec les détails


Message édité par Lt Ripley le 21-04-2023 à 12:38:30

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 21-04-2023 à 12:39:57    

Mais comment tu assembles le jar?
Car de nouveau le comportement par défaut de Gradle est correct ici, y a rien besoin de configurer.


---------------
click clack clunka thunk
Reply

Marsh Posté le 21-04-2023 à 12:44:36    

Je fais, dans intellij : build / build artifact


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 21-04-2023 à 12:44:36   

Reply

Marsh Posté le 21-04-2023 à 13:03:22    

Tente de réimporter le projet: tu le fermes, efface le répertoire .idea our le fichier .iml, puis rouvres le projet.
Y a pas de raison qu'IntelliJ IDEA importe pas correctement la structure de dossiers par défaut.
 
Cela dit tu devrais plutôt passer la commande à Gradle directement, avoir un comportement reproductible c'est un peu le but d'un outil de build.


---------------
click clack clunka thunk
Reply

Marsh Posté le 22-04-2023 à 09:17:45    

Si j'efface .idea et .iml ça me fout le boxon et faut que je refasse mon artifact dans project structure  
 
Je reste comme ça, ça me va bien !


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed