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();
    }
}

Board.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);

それは完璧に機能し続けます。

私はこれを自分で理解しようとしましたが、Googleまたはスタックオーバーフローで何も見つかりません。作るのが難しい検索フレーズです。

これが NetBeans で実行されるのに、スタンドアロンの .Jar として実行されない理由を知っている人はいますか?

4

1 に答える 1

5

あなたの問題はこの行にあります

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

「../images.LKRZV.jpg」パスは、NetBeans で実行しているときは正しいですが、JAR を実行しているときは正しくありません。jar ファイルの場所に対して正しいパスを指定してください。そのパスをイメージの絶対パスに変更すると、プログラムは正しく動作するはずです。イメージを jar に詰め込んだ方がよいでしょう。

于 2012-08-08T18:39:05.900 に答える