2016-06-01 3 views
0

Я студент, изучающий Java-программирование и использую Netbeans для создания приложения. Программа уже выполнена и хорошо загружается в IDE (с изображениями). Я должен собрать его в JAR для презентации моему лектору и сделал это, но изображения в JAR отсутствуют.Я не могу загрузить изображения .JAR

Прежде всего, я проверил все доступные ответы, чтобы изображения отображались в JAR, но я не мог понять это правильно с программой, так как он не загружается даже в IDE и показывает ошибку. Большинство из них указали, что я должен ввести (getClass().getClassLoader().getResource("image.jpg")). Я попытался ввести его, но он показывает ошибки, главным образом потому, что мои коды для размещения ImageIcon отличаются.

Ниже мой полный код JFrame представления программы:

import java.awt.Color; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.IOException; 
import javax.swing.*; 
import javax.swing.ImageIcon; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 

public class A2{ 

    public void GUI() throws IOException { 

     JFrame frame = new JFrame(); 
     frame.setVisible(true); 
     frame.setTitle("Minus"); 
     frame.setSize(700,500); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 

      //Set the layout 
      JPanel panel; 
     panel = new JPanel(); 
     panel.setLayout(null); 
     frame.setContentPane(panel); 

     // Create all components 
     JLabel ctgy = new JLabel("Minus"); 
      JLabel minus2 = new JLabel("What is 6 squares minus 3 squares?"); 
     JButton ans_a = new JButton("9"); 
      JButton ans_b = new JButton("3"); 
      JButton ans_c = new JButton("7"); 
     JButton back = new JButton("Back"); 
      JLabel min2 = new JLabel(); 

     //Add objects to layout 
     panel.add(ctgy); 
      panel.add(minus2); 
     panel.add(min2); 
      panel.add(ans_a); 
      panel.add(ans_b); 
      panel.add(ans_c); 
     panel.add(back); 

     // Set position of objects in content pane 
      min2.setLocation(100,100); 
      minus2.setLocation(20,50); 
     ctgy.setLocation(10,3); 
      ans_a.setLocation(500,100); 
      ans_b.setLocation(500,150); 
      ans_c.setLocation(500,200); 
     back.setLocation(500, 400); 

     //Set size of object 
      min2.setSize(300,300); 
     ctgy.setSize(200,50); 
      minus2.setSize(350,50); 
      ans_a.setSize(100,30); 
      ans_b.setSize(100,30); 
      ans_c.setSize(100,30); 
     back.setSize(100, 30); 

     //Set the fonts and colors 
     Font font1 = new Font("Cooper Black", Font.BOLD, 26); 
     Font font2 = new Font("Calisto MT", Font.BOLD, 20); 
     ctgy.setFont(font1); 
     ctgy.setBackground(Color.white); 
      minus2.setFont(font2); 
      minus2.setBackground(Color.red); 
     panel.setBackground (Color.RED); 
      ans_a.setBackground(Color.white); 
     ans_b.setBackground(Color.white); 
      ans_c.setBackground(Color.white); 

      min2.setIcon(new ImageIcon("src/images/6-3.png")); 
      ans_b.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0) { 
       JOptionPane.showMessageDialog(null, "Correct!"); 
       try { 
        A3.main(null); 
       } catch (IOException ex) { 
        Logger.getLogger(A1.class.getName()).log(Level.SEVERE, null, ex); 
       } 
        } 
       }); 

      ans_a.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent arg0) { 
        JOptionPane.showMessageDialog(null, "Incorrect! Please try again."); 
       } 
      });   

      ans_c.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent arg0) { 
        JOptionPane.showMessageDialog(null, "Incorrect! Please try again."); 
       } 
      }); 
     frame.repaint(); 



     back.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent f){ 
           Categories.main(null); 
         } 
       }); 



    }  

public static void main (String [] args) throws IOException { 
     A2 gd = new A2(); 
     gd.GUI(); 
    } 


} 

Это часть моего кода, где я Сформулируем JLabel положить мой образ, в котором я назвал, как min2:

JLabel ctgy = new JLabel("Minus"); 
      JLabel minus2 = new JLabel("What is 6 squares minus 3 squares?"); 
      JButton ans_a = new JButton("9"); 
      JButton ans_b = new JButton("3"); 
      JButton ans_c = new JButton("7"); 
      JButton back = new JButton("Back"); 
      JLabel min2 = new JLabel(); 

Это добавляет панель для JLabel:

panel.add(min2); 

размер и местоположение:

min2.setLocation(100,100); 
min2.setSize(300,300); 

Наконец сам и расположение изображения:

min2.setIcon(new ImageIcon("src/images/6-3.png")); 

Эта часть будет отображаться сообщение об ошибке, потому что я установил это, чтобы открыть новый класс, когда пользователь нажимает кнопку JButton так, что это произойдет, так как вы не есть A3 класс:

public void actionPerformed(ActionEvent arg0) { 
        JOptionPane.showMessageDialog(null, "Correct!"); 
        try { 
         A3.main(null); 
        } catch (IOException ex) { 
         Logger.getLogger(A1.class.getName()).log(Level.SEVERE, null, ex); 
        } 

Я проверил файл JAR с помощью WinRAR и подтвердил, что изображения папки и изображения внутри. Я хотел опубликовать скриншоты, но Imgur не работает для меня.

Путь файла для всех изображений находится внутри src/images.

Пожалуйста, представьте, какие изменения мне необходимо внести. Спасибо, и сожалею, если его попросили слишком много.

+0

Ваш JAR не должен содержать папку src ... И вы должны загружать ресурсы, используя 'getClass(). GetResourceAsStream (String path)'. См. Этот вопрос https://stackoverflow.com/questions/2343187/loading-resources-using-getclass-getresource –

+0

Хотя здесь более подробная информация о том, как загружаются ресурсы. http://stackoverflow.com/a/676273/2308683 –

+0

* «Мне нужно собрать его в JAR для презентации моему лектору и сделал это, но ** изображений нет в JAR». * ты уверен? Каков вывод 'jar -tvf the.jar' из командной строки? –

ответ

0
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/img.png"))); 

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

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