我是一名正在学习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
内。
请建议我需要做出哪些更改。谢谢,如果被问得太多,我很抱歉。
答案 0 :(得分:0)
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/img.png")));
这就是你应该如何实际加载图像文件。你给定的文件路径是错误的尝试用这种方法。