• ベストアンサー

内部リソースファイルを取得する際のファイル名の記述方法

 ファイルを開く際の、  フォルダ構造は以下のようになっています。 MainPanel.java      base   - Chara.java      Resource - charachip - image.gif ―――Chara.javaにおいて、以下のようなコンストラクタを作成しました。(int xとint yは気にしないでください) public Chara(int x, int y, String filename){  //画像の読み込み  chara_image = ImageIO.read(getClass().getResource(filename)); } ―――MainPanel.javaで、それを呼び出し、 Chara chipfile = new Chara(3,3,"Resource/charachip/hyouga.gif");  と、してみましたが・・・この第三引数の記述、明らかに間違っていますよね・・・。  この読み取る画像ファイルの指定は、どの.javaファイル(.classファイル)のあるディレクトリをカレントディレクトリとして、又、どのような書式で記述すればよいのでしょうか?  一応最終的にはJARファイルにまとめる予定です。但し、今の段階では(当たり前ですが)classファイルの状態です。  環境は、JDK 6 Update1、Eclipse3.2.0です。 ※挿入されているスペースは全て全角です。

noname#82539
noname#82539
  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.1

>この読み取る画像ファイルの指定は、どの.javaファイル(.classファイル)のあるディレクトリをカレントディレクトリとして、又、どのような書式で記述すればよいのでしょうか? そのクラスはどのパッケージに入っていますか? 例えば、jp.hoge.Charaで、このCharaクラスと同じ場所にあるということは、jp.hogeパッケージ内におかれているということですから、リソースを読み込むときは"/jp/hoge/hyouga.gif"となるでしょう。

noname#82539
質問者

お礼

 ご回答ありがとうございます。ルートディレクトリを一番上にするのですね。

その他の回答 (1)

  • momozange
  • ベストアンサー率67% (21/31)
回答No.2

Javaの実行時の「カレントディレクトリ」は基本的にjavaコマンドを発行した時点でのパスになります。 今回のResourceを使用したファイルアクセスはカレントディレクトの問題ではなく あくまでも「クラスパスが通ったリソースに対する完全パッケージ修飾」でアクセスすることが必要です。 なのでaaa.bbbパッケージにXXXX.gifを配置したのであれば、やはりaaa.bbb.XXXX.gifというアクセス方法になります。 要は通常のクラスファイルと同じようにアクセスすればよいのです。

noname#82539
質問者

お礼

 ご回答ありがとうございます。パッケージ的な形式でもできるのですね。

関連するQ&A

  • getClass().getResourceでのファイル指定

    Toolkit.getDefaultToolkit().getImage(getClass().getResource("image.gif")); というコードを書いたとき、image.gifファイルがclassファイルと同じフォルダにある場合は問題ないですが、他のフォルダにあるときの参照方法はどうすればいいのでしょうか。 getResource()の中はどのように記述してファイルを指定すればいいのでしょうか。 image.gifファイルは「C:\workspace\java\src\draw\gazo\image.gif」にあるものとします。

  • 実行可能jarファイルのファイル名取得

    javaの実行可能jarファイルの中で、そのjarファイル名を取得する方法はどうすればよいでしょうか? なお、クラスファイル名は次の方法で取得できています。 public class AAA { public static void main(String[] args) { System.err.println( AAA.class.getResource("AAA.class").toString()); } } 2011年10月16日

    • ベストアンサー
    • Java
  • Processing :指定フォルダ内のフォルダ名とファイル名の取得

    Javaと同じかな~と思って、以下のスプリクトを試してみたのですが、だめでした。 すみません、ヒントください。 環境:OS X import java.io.*; public class Test { public static Hoge() { try { File directory1 = new File("User/***/Desktop); String[] fileArray = directory1.list(); for(int i = 0; i < fileArray.length; i++) { System.out.println(fileArray[i]); } } catch (IOException e) { } } }

    • ベストアンサー
    • Java
  • 内部クラスを別ファイルに

    こんにちは。 お世話になります。 早速、質問なのですが、 内部クラスを別のファイルに記述することは出来ますでしょうか? // MainClass.java public class MainClass{ /* */ private class InnerClass1{ } private class InnerClass2{ } } これのInnerClass1とInnerClass2をそれぞれ InnerClass1.java、InnerClass2.javaファイルのように別のファイルに記述したいと思っています。 出来そうな気はするのですが内部クラスについて 書いてある本やサイトはすべて同じファイルに書いてあったもので・・・ 方法がありましたらよろしくお願い致します。

    • ベストアンサー
    • Java
  • eclipseでjarファイル内のリソースファイルをうまく扱うには?

    こんにちわ。 私は今、windows XP + eclipse 3.1.1(日本語化済) でswingアプリケーションを作っています。 完成後は、実行可能jarファイルとして配布したいと考えています。 jarファイル内の画像ファイルを読み込んで、トグルボタンの アイコンに使いたいので、メインクラス内で、 jToggleButton1.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/transition.jpg"))); という記述をしました。 「ファイル」→「エクスポート」→「jarファイル」 で、実行可能jarファイルを作ったときはちゃんと 画像が読み取れているのですが、 eclipseから直接実行をすると、以下のようなNullPointerException が発生してしまいます。 java.lang.NullPointerException at javax.swing.ImageIcon.<init>(Unknown Source) at DTT.getJToggleButton1(DTT.java:261) at DTT.getJPanel5(DTT.java:216) at DTT.getJScrollPane(DTT.java:203) at DTT.getJPanel(DTT.java:99) at DTT.initialize(DTT.java:478) at DTT.<init>(DTT.java:468) at DTT.main(DTT.java:458) (DTTという名前のアプリケーションなのです。。) jarに出力する場合と、eclipseから直接実行する場合で 記述を変える必要があるのでしょうか? それともデフォルト作業ディレクトリの指定などを適切に行えば 統一的に扱えるようになるのでしょうか? なにとぞよろしくお願いします。

    • ベストアンサー
    • Java
  • プログラムの実行順番を教えてください

    始めまして。 http://javagame.skr.jp/index.php?RPG%A4%F2%BA%EE%A4%ED%A4%A6のページで配布されているサンプルソースの順番がわからないので教えてください。 できれば、実行順番に番号を振ってもらえればありがたいです。 ○Rpg.class import java.awt.Container; import javax.swing.JFrame; /* * Created on 2005/10/09 * */ /** * @author mori * */ public class Rpg extends JFrame { public Rpg() { // タイトルを設定 setTitle("勇者登場"); // パネルを作成 MainPanel panel = new MainPanel(); Container contentPane = getContentPane(); contentPane.add(panel); // パネルサイズに合わせてフレームサイズを自動設定 pack(); } public static void main(String[] args) { Rpg frame = new Rpg(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } ○MainPanel.class import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JPanel; class MainPanel extends JPanel { // パネルサイズ private static final int WIDTH = 480; private static final int HEIGHT = 480; // 勇者のイメージ private Image heroImage; public MainPanel() { // パネルの推奨サイズを設定 setPreferredSize(new Dimension(WIDTH, HEIGHT)); // イメージをロード loadImage(); } public void paintComponent(Graphics g) { super.paintComponent(g); // 勇者のイメージを表示 g.drawImage(heroImage, 0, 0, this); } private void loadImage() { ImageIcon icon = new ImageIcon(getClass().getResource("image/hero.gif")); heroImage = icon.getImage(); } }

  • NullPointerExeption

     RPGを作成しているのですが、 Exception in thread "main" java.lang.NullPointerException というエラーメッセージが表示されてしまいます。 public static void main(String[] args) { MainPanel mainpanel = new MainPanel(); ←問題点その一 } /* 主となるメソッド */ public MainPanel(){ //スーパークラスのコンストラクタ(ウインドウ作成などの初期設定を行う) super(); //中略 //Mapクラスのインスタンス(何もしない) m = new Map(); //マップ描画 m.drowMap(Map.HotelRoom); ←問題点その二 //以下略 } これらの問題点はコンソールに表示されるだけですが、別にeclipse側で、 MainPanel mainpanel = new MainPanel(); のmainpanelに黄色い下線が表示され、「ローカル変数mainpanelは読み取られません」という警告が出されます。 又、以下はmap.Mapクラス(インポート済み)にあるdrawMapメソッドです。 public void drowMap(int mapName){ chooseMap(mapName); mapchip = ImageIO.read(getClass().getResource("/Resource/mapchip/" + mapImage));//try~catchは略 for(int i=0; i < tate; i++){  //マップのX座標を初期化  map_x = insets.left; ←問題点三  //マップのY座標=フレームの上枠+行数×チップサイズ  map_y = insets.top + i * MAPCHIP_SIZE;   /** 以下はあまり関係ないと思うけど、念のため・・・ **/  for(int j = 0; j < yoko; j++){   //マップのX座標=回数(0回目を最初とする)×マップチップの大きさ+フレームの左枠   map_x = j * MAPCHIP_SIZE +insets.left;   int chipnumber = map[i][j];   //横のマスの数   int chip_kazu_yoko = map[0].length;   //そのマップチップは何行目にあるか   int gyou = (int)chipnumber/chip_kazu_yoko;   source_y = gyou * MAPCHIP_SIZE;   source_x =chipnumber%chip_kazu_yoko;  } //マップの描画 g.drawImage(mapchip,map_x,map_y,MAPCHIP_SIZE,MAPCHIP_SIZE, source_x,source_y,source_x+MAPCHIP_SIZE/2,source_y+MAPCHIP_SIZE/2,frame); } } 問題点三にあるinsets.leftは、Mapクラスのスーパークラスで public Insets insets; と定義され、MainPanelで実行される、super()の中で、 insets = frame.getInsets(); のように値を取得しています。 環境はJDK&JRE 6 Update1、eclipse3.1.1です。 長い上にわかりにくくて非常に恐縮なのですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • paintメソッドでエラー

    以下はSwingのフレーム上に画像を表示させようとして書いたものの全文です。実行するとSyntax errorがでますが、これはどうしてでしょうか。 なおべつのプログラムでmainメソッドとpaintメソッドを同じクラスに書いたらうまく表示できました。 アドバイスお願いします。 import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.JFrame; public class MyImage3 {  public static void main(String[] args) {   MyFrame7 frame1=new MyFrame7();   frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   frame1.pack();   frame1.setBounds(100,100,400,320);   frame1.setVisible(true);  } } class MyFrame7 extends JFrame{  public MyFrame7(){   public void paint(Graphics g){   //この行でSyntax error発生    BufferedImage bImage1=null;    try {     bImage1=ImageIO.read(getClass().getResource("k_1pin.gif"));    } catch (Exception e) {     e.printStackTrace();    }    g.drawImage(bImage1,40,40,this);   }  } }

    • ベストアンサー
    • Java
  • jarファイル内のクラスからjarファイル名の取得

    こんにちわ!yukimura1024です。 ちょっとわかりにくいタイトルかもですが質問です(^^; ○前提条件 1.コマンドプロンプトで以下のようにjarファイルを実行します。  java -jar xxx.jar xxx1 xxx2 2.xxx.jarのなかはx.class、y.class、z.class、と3つのクラスがあり、   x.classのmainメソッドが最初に呼び出されます。 ○質問 上記条件のとき、x.classのmainメソッド内で「xxx.jar」という文字列を取得したいのですが こんなことは可能でしょうか? なぜこんなことをしたいのかというと以下の理由からです。 1.xxx.jarのほかにyyy.jarというjarファイルも作成し、x.class、y.class、z.classを格納する。 2.yyy.jarも最初にx.classのmainメソッドが呼び出される。 3.x.classのmainメソッド内でxxx.jar、yyy.jarのどちらとして呼び出されたのか知りたい! ※2つのjarファイルに格納するx.class、y.class、z.classはまったく同じものです。 アドバイスいただける方いましたらお願いします。

    • ベストアンサー
    • Java
  • JARファイル内でのファイルの作成

    JARファイル内に格納されたクラスファイル(MainWindow.class)を実行して、同じJARファイル内にバイナリファイル(DataFile.bin)を作成したいのですがどのようにしたらよいでしょうか。  JARファイル内のクラスファイル(MainWindow.class)に記述された、randomAccessFile(string,"rw")命令によって、MainWindow.classが格納されているのと同じJARファイル内にDataFile.binを新規作成したいと思っています。  ちなみに、作成したファイルは、 URL url=null; url=getClass.getResource("DataFile.bin")で呼び出したいと思っています。  インターネット等で検索しているのですが、なかなか見つからなくて困っています。すみませんがどうかよろしくお願いします。

    • ベストアンサー
    • Java