2015-11-17 3 views
0

Я нашел этот код, и я пытаюсь адаптировать его к моему проекту.загрузить каталог ресурсов в файле 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; 
    } 

} 

Я должен экспортировать все в .jar файл, запустив его из затмений работы должным образом, в то время как только на экспорт .jar файл не работает. Проблема в том, что я не могу найти фотографии/папку, это вторая папка ресурсов, но и попытка root не работает. Вместо этого он может читать оба затмения, что в .jar файл, каждое изображение передается в качестве параметра, как и для вызова следующего класса, который отображает сообщение об ошибке в изображении:

err.err("fail.jpg"); 

структура папок проекта является, как следующим образом:

проект:

  • ЦСИ (классы)
  • источника (изображения)
  • фотографии (фото)

Все пути правильные, als "fail.jpg". Недели, которые я ищу для решения, мне нужно знать, как загружать изображения непосредственно из папки ресурсов, чтобы заставить их работать непосредственно в файле .jar. большое спасибо!

ответ

1

Чтобы получить файл, вам необходимо использовать способ getResourceAsStream("/fail.jpg"). Пример будет выглядеть так:

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

Ваш jpg-файл должен быть в исходной папке для этого примера.

Вместо Main вы можете использовать любой класс в своем jar-файле.

Смежные вопросы