我无法在.JAR中加载图像

时间:2016-06-01 03:39:39

标签: java image swing jar

我是一名正在学习Java编程并使用Netbeans创建应用程序的学生。该程序已经完成并在IDE中很好地加载(带图像)。我必须将它构建到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);
                    } 

我用WinRAR检查了JAR文件并确认图像文件夹和图像在里面。我想发布截图,但Imgur不适合我。

所有图片的路径文件都在src/images内。

请建议我需要做出哪些更改。谢谢,如果被问得太多,我很抱歉。

1 个答案:

答案 0 :(得分:0)

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

这就是你应该如何实际加载图像文件。你给定的文件路径是错误的尝试用这种方法。