2016-05-16 4 views
0

私はしばらく前にEclipseを構築しました。私はそれをいつものように.jarにエクスポートしたかったのです。私は前にこれをやっているし、私の他のプロジェクトでもうまくいった。白い空白の画面が表示されるため、これは機能しません。私はSystem.exit(1)を別の場所に置いて、プログラムの動作が停止している場所を確認します。最終的に私はその場所を見つけました。私の.txtファイルを見つけることはできませんが、動作している場合はeclipseで見つけることはできません。私は7zip(winzipのような)で.jarをチェックし、.txtファイルがそこにあります。また、コマンドラインを使用して開くと、.txtファイルが見つからないという同じエラーが発生します。私は関連する問題の同じ質問を持っている人々のためにインターネットとstackflowで多くを見てきましたが、残念ながら修正を提供しませんでした。Javaゲームのeclipseは.jarへのエクスポート後に.txtを見つけることができません

新しい世界を作り出すコードはこれです。世界で

world = new World(handler,"res/worlds/world1.txt"); 

それは、この目的球を呼び出します。

loadWorld(path); 

この目的球は、文字列をバック返す必要があります。まず、それはその文字列を取得するために別の関数を呼び出します。

String file = Utils.loadFileAsString(path); 

最後に、このファイルが見つからないため、動作しないコードです。

public static String loadFileAsString(String path){ 
    StringBuilder builder = new StringBuilder(); 

    try{ 

     BufferedReader br = new BufferedReader(new FileReader(path)); 
     String line; 
     while((line = br.readLine()) != null) 
      builder.append(line + "\n"); 
     br.close(); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
    return builder.toString(); 
} 

私に見逃したことはありますか? Eclipseは正常に動作しますが、エクスポートした後は.txtはエクスポートされませんが、まだそこにあります。 ありがとうございます。

+3

http://stackoverflow.com/a/20389418/2958086これは、瓶の伝統的な構造の一部ではありません。 – Compass

+0

上記の伝統的な*ファイルパス構造の正誤表。 – Compass

答えて

0

JavaクラスFile(FileReaderによって使用される)は、ファイルシステムパス(絶対パスまたは現在の作業ディレクトリに対する相対パス)をOS上で処理します。あなたの例は、相対パスを示します。私は "res/world/..."を頼んで、Eclipseのプロジェクトフォルダをはるかに超えています。 eclipseでアプリを実行する場合、現在のディレクトリはプロジェクトのパスそのものです。したがって、コードはEclipseで動作しました。

(jarを起動することによって)スタンドアロンで実行すると、ファイルは同じOSパスに見つかりません。それは瓶の中にあります。したがって、クラスローダーのリソース読み込み機能を使用してアクセスする必要があります。

0

これは相対パスです。相対パスは、アプリケーションを実行したときの相対位置で解決されます。 eclipseでは、これはデフォルトでプロジェクトディレクトリです。ただし、外部でjarを実行している場合は、jarの実行方法によってまったく異なります。

一般的な解決策の1つは、リソース(world1.txt)を基準にして同じ位置にjarファイルを置くことです。たとえば、次のディレクトリ構造...

-lib 
--main.jar 
-res 
--worlds 
---world1.txt 
main.sh 

次に、アプリケーションに基本ディレクトリを取得する必要があります。 1つの方法は、コマンドライン引数、システムプロパティ、または環境変数としてmain.jarの絶対パスを渡すことです。

別の一般的な方法は、実行中のjarファイルのパスをthisのような手法で取得することです。あなたは(たとえば、7zipをなど)のアーカイブリーダーを持っている場合の.jarを開いてかどうかを確認

String world1Path = baseDirectory + "res/worlds/world1.txt" 
0

最後に、あなたのアプリケーションでは、代わりに相対パスを使用して、あなたは絶対パスを使用することができます.txtファイルは.jarの内部にあります。そうでない場合は、.txtファイルを.jarファイルにコピーします。Javaアプリケーションに.pngを使用しようとすると、これが私に起こりました。それがうまくいくことを望む!

関連する問題