2015-11-17 1 views
0

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!

Répondre

1

Vous devriez envisager d'utiliser la méthode getResourceAsStream("/fail.jpg") pour obtenir votre fichier. Un exemple ressemblerait à

InputStream inputStream = Main.class.getResourceAsStream("/fail.jpg"); 

Votre fichier jpg devrait être dans votre dossier source pour cet exemple.

Au lieu de Main, vous pouvez utiliser n'importe quelle classe dans votre fichier jar.