Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/12/2012, à 07:58

yayals

Ou mettre les images dans un .jar executable ?

Bonjour,
j'ai créer un programme java avec des image. Ces images se trouvant dans le même dossier que les fichiers sources, je ne leur ai pas donné d'adresses. Par exemple:

container.add(new ImageComponent(ImageIO.read(new File("crayon.jpeg"))));

Au moment de la compilation le programme a bien trouvé les images car elles était bien dans le même dossier que les fichiers .class. Par contre dans le fichier .jar le programme ne les trouve pas. J'ai mis les images dans la racine de l'archive (comme les fichiers .class).
Mon fichier MANIFEST.MF est

Manifest-Version: 1.0
Main-Class: Main

comment faire ?
Merci d'avance


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#2 Le 07/12/2012, à 10:36

binnette

Re : Ou mettre les images dans un .jar executable ?

Tu utilise un IDE ? Ou bien tu créé le package à la main ?

Ton code ne va pas fonctionner, il faut faire :

crayon = new ImageIcon(this.getClass().getResource("crayon.jpeg")).getImage();

http://www.zetcode.com/tutorials/java2d … a2dimages/


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#3 Le 07/12/2012, à 18:00

yayals

Re : Ou mettre les images dans un .jar executable ?

Mais le sais deja mettre des images dans une fenetre. Mon probleme n'est pas la, quand je lance les fichiers .class a l'aide de la commande

java LaClassMainDeMonProg

le programme se lance correctement. Par contre des que je met le programme dans une archive .jar exécutable et que je le lance (double-clic) je me retrouve avec une fenetre sans rien. Quand je le lance avec un terminal j'obtien ceci:

[yayals@yayals-debian:~/Bureau/Projet]$ java -jar Programme.jar 
Exception in thread "main" javax.imageio.IIOException: Can't read input file!
        at javax.imageio.ImageIO.read(ImageIO.java:1291)
        at Fenetre.<init>(Fenetre.java:41)
        at Main.main(Main.java:6)

avec toujours ma fenetre sans rien.


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#4 Le 07/12/2012, à 19:03

binnette

Re : Ou mettre les images dans un .jar executable ?

La solution que je te propose dans le post n°2 résoudra très certainement ce problème (sauf si tu n'as pas embarqué l'image dans ton jar ou que tu te trompes dans le chemin de l'image).
Essaye la.

Dernière modification par binnette (Le 07/12/2012, à 19:05)


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#5 Le 07/12/2012, à 20:02

yayals

Re : Ou mettre les images dans un .jar executable ?

oui mais crayon doit être une variable oui une classe Instanciée ?
j'ai essayé

Image crayon = new ImageIcon(this.getClass().getResource("crayon.jpeg")).getImage();

suivi d'un

monPanel.add(crayon);

mais il me met une erreur de compilation.

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The method add(Component) in the type Container is not applicable for the arguments (Image)

Dernière modification par yayals (Le 07/12/2012, à 20:03)


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#6 Le 07/12/2012, à 20:33

binnette

Re : Ou mettre les images dans un .jar executable ?

Essaye ça :

monPanel.add(new JLabel(new ImageIcon(getClass().getResource("crayon.jpeg"))));

Tu sembles débuter en java. Je me permet de te proposer un tutoriel : http://www.siteduzero.com/tutoriel-3-10 … -java.html
Et plus particulièrement la partie 3 du tuto qui traite de swing. smile


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne

#7 Le 08/12/2012, à 00:04

yayals

Re : Ou mettre les images dans un .jar executable ?

binnette a écrit :

Tu sembles débuter en java. Je me permet de te proposer un tutoriel : http://www.siteduzero.com/tutoriel-3-10 … -java.html
Et plus particulièrement la partie 3 du tuto qui traite de swing. smile

Hé oui je débute en java. Le jours au j'ai voulu apprendre ce langage j'ai acheté le livre du tuto que tu m'a donné. Et je suis actuellement en train de lire... La partie 3. Mais je n'aime pas le technique donnée pour la gestion des images car elle nécessite de placer chaque images avec des points X et Y. J'ai cherché une autre technique passant par un layout manager (ce qui est beaucoup plus rapide). j'ai trouvé ceci:
class Main:

import java.io.IOException;


public class Main{
	public static void main(String [] arg) throws IOException{
		Fenetre fen = new Fenetre();
	}
}

 
class ImageComponent

public class ImageComponent extends java.awt.Component
{
    private static final long serialVersionUID = 1;

    private final java.awt.Image img;
        
    public ImageComponent(java.awt.Image image)
    {
        img = image;
    }
    
    @Override
    public void paint(java.awt.Graphics g)
    {
        g.drawImage(img, 0, 0, getWidth(), getHeight(), null, null);
    }
}

Class Fenetre:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Fenetre extends JFrame implements ActionListener {
	private JPanel container = new JPanel();
	private JTextField input1 = new JTextField();
	private JTextField input2 = new JTextField();
	private JTextField input3 = new JTextField();
	private JTextField input4 = new JTextField();
	private JButton entrer1 = new JButton("Entrer");
	private JButton entrer2 = new JButton("Entrer");
	private JButton entrer3 = new JButton("Entrer");
	private JButton entrer4 = new JButton("Entrer");
	private JLabel verif1 = new JLabel("t'a rien entré");
	private JLabel verif2 = new JLabel("t'a rien entré");
	private JLabel verif3 = new JLabel("t'a rien entré");
	private JLabel verif4 = new JLabel("t'a rien entré");
	String nom;
	public Fenetre() throws IOException{
		this.setSize(900, 500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);
		this.setTitle("Jeu");
		this.setVisible(true);
		this.setContentPane(container);
		this.setMinimumSize(new Dimension(800, 300));
		container.setLayout(new GridLayout(4, 4, 5, 5));
        container.add(new ImageComponent(ImageIO.read(new File("crayon.jpeg"))));
        container.add(new ImageComponent(ImageIO.read(new File("ecole.jpg"))));
        container.add(new ImageComponent(ImageIO.read(new File("maison.jpeg"))));
        container.add(new ImageComponent(ImageIO.read(new File("ordi.jpeg"))));
        container.add(input1);
        container.add(input2);
        container.add(input3);
        container.add(input4);
        container.add(entrer1);
        container.add(entrer2);
        container.add(entrer3);
        container.add(entrer4);
        container.add(verif1);
        container.add(verif2);
        container.add(verif3);
        container.add(verif4);
        container.setBackground(Color.ORANGE);
        entrer1.addActionListener(this);
        entrer2.addActionListener(this);
        entrer3.addActionListener(this);
        entrer4.addActionListener(this);
	}
	public void actionPerformed(ActionEvent a) {
		if(a.getSource() == entrer1){
			nom = input1.getText();
			if(nom.equals("CRAYON") || nom.equals("crayon"))
				verif1.setText("Oui !");
			else
				verif1.setText("Non !");
		}
		if(a.getSource() == entrer2){
			nom = input2.getText();
			if(nom.equals("ECOLE") || nom.equals("ecole"))
				verif2.setText("Oui !");
			else
				verif2.setText("Non !");
		}
		if(a.getSource() == entrer3){
			nom = input3.getText();
			if(nom.equals("MAISON") || nom.equals("maison"))
				verif3.setText("Oui !");
			else
				verif3.setText("Non !");
		}
		if(a.getSource() == entrer4){
			nom = input4.getText();
			if(nom.equals("ORDINATEUR") || nom.equals("ordinateur"))
				verif4.setText("Oui !");
			else
				verif4.setText("Non !");
		}
	}
}

j'ai fais ce programme pour ma petite soeur de 4ans qui apprend a écrire sur un PC.
je n'arrive juste pas a le mettre dans un .jar
Je pourrais sans doute mettre les Images dans un dossier bidon et mettre dans le code l'adresse de l'image mais cette solution ne plais pas trop.


ACER aspire 5740g: Ubuntu 14.04

Hors ligne

#8 Le 08/12/2012, à 01:09

binnette

Re : Ou mettre les images dans un .jar executable ?

Tu souhaites utiliser des Layout pour tes images ? Alors la méthode du JLabel est toute indiquée wink (cf mon post n°6)

Également, si tu utilise Netbeans, ce dernier embarque un designer de fenêtre qui ne permettra de créer simplement des layout. @+


Avez-vous consulté la documentation et demandé à Google ?
Merci d'être précis. Qui fait quoi et comment ? Donnez le constructeur, le modèle et l'architecture de votre machine.
Demandé traitée ? Ajoutez [Résolu] au début du sujet de votre discussion.

Hors ligne