0

我有一个使用JFrame/创建的小型“hello world”应用程序JPanel,它在我的 IDE(Netbeans)中完美运行。我使用 仅在屏幕上绘制一个字符串对其进行了测试Graphics.drawString(),它在浏览器和构建的 .Jar 文件中都能完美运行。

我决定添加一个图像只是为了测试它(我是 Java 新手),并且应用程序继续在 IDE 中运行,但是构建的 .Jar 文件没有启动任何东西,或者给出错误或任何东西。

这是2个类文件:

Boxy_Main.java:

package boxy;

import javax.swing.JFrame;
import java.awt.*;

public class Boxy_Main extends JFrame {

    public static Boxy_Main main;

    public Boxy_Main() {
        add(new Board());
        setTitle("Boxy");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(467, 700);
        setLocationRelativeTo(null);
        setVisible(true);
        setResizable(true);
    }
    public static void main(String[] args) {
        main = new Boxy_Main();
    }
}

板子.java:

package boxy;

import javax.swing.JPanel;
import java.awt.*;
import javax.swing.*;

public class Board extends JPanel {

    public Graphics2D g2d;
    public Graphics g;
    public Image hello_image;

    public Board() {

        this.set_properties();

    }

    public void set_properties() {

        this.hello_image = new ImageIcon(Board.class.getResource("../images/LKRZV.jpg")).getImage();


    }

    public void paint(Graphics g) {

        this.g = g;
        this.g2d = (Graphics2D) g;


        this.g2d.drawImage(this.hello_image, null, this);

        this.g.drawString("hello", 100, 80);
        this.g.drawString("world", 100, 94);


    }
}

如果我注释掉

this.hello_image = new ImageIcon(Board.class.getResource("../images/LKRZV.jpg")).getImage();

this.g2d.drawImage(this.hello_image, null, this);

它继续完美地工作。

我自己试图弄清楚这一点,我无法通过谷歌或堆栈溢出找到任何东西。这是一个很难制作的搜索短语。

任何人都知道为什么它会在 NetBeans 中运行,而不是作为独立的 .Jar 运行?

4

1 回答 1

5

你的问题在这一行

this.hello_image = new ImageIcon(Board.class.getResource("../images/LKRZV.jpg")).getImage();

当您在 NetBeans 中运行时,“../images.LKRZV.jpg”路径是正确的,但在您运行 JAR 时它是不正确的。确保提供相对于 jar 文件位置正确的路径。如果您将该路径更改为图像的绝对路径,您的程序应该可以正常工作。将图像与罐子一起打包可能会更好。

于 2012-08-08T18:39:05.900 回答