3

Javaで画像が見つからないという問題があります。私の友人と私はプロジェクトに取り組んでおり、私たちはまったく同じことをしました。画像の場所へのパスを変更し、画像をEclipseにドラッグ/ドロップしました。しかし、私は運がありませんでした。これが私のコードです:

import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Map;

import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class MapArray {
    static JPanel[][] tiles = new JPanel[30][29];
    static String[][] images = new String[30][30];
    final static int SIZE = 30;
    static int place=0;

public MapArray(){

}

protected static ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = Map.class.getResource(path);
    if (imgURL != null) {
        return new ImageIcon(imgURL);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

public static void setMap(){

    try {
        String a = getFileContents("C:\\Users\\*****\\workspace\\Pokemon\\src\\map1.txt");
        for(int x=0; x<29; x++){
            for(int y=0; y<30; y++){
                images[x][y]=a.substring(0,a.indexOf(" "));
                a=a.substring(a.indexOf(" ")+1);
                System.out.println(images[x][y]);
            }
        }
    } catch (Exception e) {
        System.out.println("y u no work :(");
    }

}

public static String getFileContents(String fileName) throws Exception {
    File theFile = new File(fileName);
    byte[] bytes = new byte[(int) theFile.length()];
    InputStream in = new FileInputStream(theFile);
    int m = 0, n = 0;
    while (m < bytes.length) {
        n = in.read(bytes, m, bytes.length - m);
        m += n;
    }
    in.close();
    return new String(bytes); 
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            setMap();
            JFrame frame = new JFrame();
            frame.setLayout(new GridLayout(30, 29, 0, 0));
            for (int i = 0; i < 29; i++) {
                for (int j = 0; j < 29; j++) {
                    tiles[i][j] = new JPanel(new GridLayout());
                    tiles[i][j].add(new JLabel(
                            createImageIcon("C:\\Users\\*****\\workspace\\Pokemon\\src\\tile"+"-"+images[i][j]+".png")));
                    frame.add(tiles[i][j]);
                }
            }
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    });
}


}

フルイメージパスを入力して試したすべてが機能しません。また、誰もが相対的なパスを手伝うことができますか?友人と私は複数のコンピューター間でコードを共有するので、ワークスペースが配置されている場所専用ではない相対パスが最適です。ありがとう!

4

4 に答える 4

2
// get resource of *your* class, instead of Java's Map.class
MapArray.class.getResource(path);
...
String a = getFileContents("map1.txt"); // local path, not absolute

srcファイルをファイルの隣のフォルダに置きますMapArray.java

src/
 |-- MapArray.java
 |-- ...
 `-- map1.txt

map1.txtbinファイルの隣のディレクトリに移動され.classます(bin /はデフォルトでEclipseで非表示になっていますが、ここでクラスパスが設定されます)。後で、リソースファイルがにパッケージ化されていることも確認する必要があります.jar

于 2012-04-05T17:20:17.123 に答える
1

リソースが本質的にアプリの一部である場合。(組み込みアプリケーションリソース)書き込み用ではなく、アプリケーションのランタイムクラスパスのJarに追加し、から取得したURLを介してアクセスする必要がありますClass.getResource()。次のように機能します。

URL urlToMap1 = this.getClass().getResource("/src/map1.txt");

リソースが到達するJar内の正確なパスを確認し、Jarのルート()から参照してから、Jar/内のパス()を参照する必要がありsrc/map1.txtます。

于 2012-04-05T18:44:01.130 に答える
1

誰かが相対的なパスを手伝うことができるでしょうか?

String a = getFileContents("./src/map1.txt");
于 2012-04-05T16:46:43.700 に答える
1

大量のコードを投稿し、質問で受け取ったエラーメッセージを指定しない代わりに、単純なコードスニペットから始めることができます(インポートを無視します...怠惰すぎてIDEを起動できないため)

public static void main( String[] args ){
  File file = new File( "C:...");//with the path you use in your code
  System.out.println( file.exists() );
}

これは、問題を発見/デバッグするために必要なものです。次に、相対パスへの変換を開始できます。

于 2012-04-05T17:59:39.040 に答える