J'ai trouvé ce code et j'essaie de l'adapter à mon projet.charger le répertoire de ressources dans le fichier jar
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.net.URL;
public class Album {
static boolean contr = false;
static String path = "photos/";
static int MAX;
static String []imgName;
static JLabel label = new JLabel();
static JMenuBar mBar = new JMenuBar();
static JMenu mn = new JMenu("open here ");
static JMenuItem []menuItem;
static JFrame fot = new JFrame();
static JButton back = new JButton(" back ");
public static void Album() {
if (contr==true){
fot.setVisible(true);
}
else{
JFrame.setDefaultLookAndFeelDecorated(true);
File directory = new File(path);
if (!directory.exists()) {
System.err.println("The specified directory doesn't exist!!");
err.err("fail.jpg");
}
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
// Do nothing
}
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.CENTER);
mBar.updateUI();
mn.updateUI();
// Filter out the Images
imgName = directory.list(new FilenameFilter() {
String[] readFormat = ImageIO.getReaderFormatNames();
@Override
public boolean accept(File dir, String name) {
for (int i = 0; i < readFormat.length; i++) {
if (name.endsWith(readFormat[i])) {
return true;
}
}
return false;
}
});
MAX = imgName.length;
if (MAX == 0) {
System.err.println("OOps , no images");
System.exit(-1);
}
//Limit the maximunm entries to 10
if (MAX > 19) {
MAX = 19;
}
menuItem = new JMenuItem[MAX];
for (int i = 0; i < menuItem.length; i++) {
menuItem[i] = new JMenuItem(imgName[i].substring(0, imgName[i].lastIndexOf(".")), new ImageIcon(getImage(path + imgName[i]).getScaledInstance(32, 32, Image.SCALE_SMOOTH)));
menuItem[i].updateUI();
mn.add(menuItem[i]);
menuItem[i].setActionCommand(imgName[i]);
menuItem[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
label.setIcon(new ImageIcon(getImage(path + ae.getActionCommand())));
}
});
}
mBar.add(mn);
fot.setJMenuBar(mBar);
fot.add(new JScrollPane(label));
fot.add(back, BorderLayout.AFTER_LAST_LINE);
Dimension scrDim = Toolkit.getDefaultToolkit().getScreenSize();
fot.setSize(scrDim.width-250 , scrDim.height-50);
fot.setVisible(true);
fot.setTitle("photo album");
fot.setResizable(false);
fot.setLocationRelativeTo(null);
fot.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
back.addActionListener(new ActionListener() { //back
@Override
public void actionPerformed(ActionEvent e) {
fot.setVisible(false);
contr=true;
menu.menu();
}
});
}
}
// Get the Image from the disk
public static Image getImage(String fileName) {
try {
return ImageIO.read(new File(fileName));
} catch (IOException ioe) {
System.err.println("Error loading Image : " + fileName);
}
return null;
}
}
je dois exporter tous dans un fichier .jar, il en cours d'exécution du travail d'éclipse correctement, alors une fois le fichier exporté .jar ne fonctionne pas. Le problème est que je ne peux pas trouver les photos/dossier, c'est un deuxième dossier de ressources, mais aussi essayer de la racine ne fonctionne pas. Au lieu de cela, il peut lire les deux eclipse que dans le fichier .jar, chaque image passée en paramètre, comme pour appeler la classe suivante qui affiche un message d'erreur dans une image:
err.err("fail.jpg");
le modèle des dossiers de projet est aussi suit:
projet:
- src (classes)
- source (images)
- photos (photos)
Tous les chemins sont corrects, aussi "fail.jpg". Sont semaines que je suis à la recherche d'une solution, j'ai besoin de savoir comment télécharger des images directement à partir d'un dossier de ressources pour les faire fonctionner directement dans le fichier .jar. Merci beaucoup!