0

Jフレームに表示する画像を取得できません。ファイルを正しい場所に置き、名前を正しく入力したと確信しています。これはコードです

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.net.URL;

import javax.swing.JFrame;


public class DrawImage extends JFrame {
    private Image image;
    public static void main(String[] args){
        new DrawImage();
    }
    public DrawImage(){
        super("DrawImage");
        setSize(600,600);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        File appBase = new File("."); //current directory
        String path = appBase.getAbsolutePath();
        System.out.println(path);
        Toolkit tk = Toolkit.getDefaultToolkit();
        image= tk.getImage(getURL("Castle.jpg"));
    }
    private URL getURL(String filename){
        URL url=null;
        try{
            url=this.getClass().getResource(filename);
            //url=DrawImage.class.getResource(filename);
            //url=C:\hw/myProg/Graphics2d/Castle.jpg;
        }
        catch(Exception e){
            System.out.print("spleen:");
        }
        return url;
    }
        public void paint(Graphics g){
            Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(Color.BLACK);
            g2d.fillRect(0, 0, getSize().width, getSize().height);
            g2d.drawImage(image, 0, 40, this);
        }

}

私が得たのは黒のJFrameですが、画像はありません。これは、いとこに書き出されます。

C:\hw\myProg\Graphics2d\.
Uncaught error fetching image:
java.lang.NullPointerException
    at sun.awt.image.URLImageSource.getConnection(Unknown Source)
    at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
    at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
    at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    at sun.awt.image.ImageFetcher.run(Unknown Source)

当然、私の画像ファイルはC:\ hw \ myProg \ Graphics2d \ Castle.jpgにあります。では、何が間違っているのでしょうか。編集:わかりました。この便利なコードから、IDEがどのフォルダーに準拠しているかをテストできることがわかりました。Eclipseでは、binフォルダーにあります。

URL test = DrawImage.class.getResource("/");
        System.out.println(test);
4

1 に答える 1

1

エラーから、Castle.jpgはクラスローダーのクラスパスコンテキスト内にありません。画像がアプリケーション内でJarされていない場合は、Fileオブジェクトを使用してを生成できますがURL、それはあなたがやりたいことではないと思います。

あなたは出来る:

  • プログラムファイル「C:\ hw \ myProg\Graphics2d」から実行していることを確認してください。
  • アプリケーションをJarします(リソースと一緒に)
于 2012-07-26T02:15:15.560 に答える