2016-07-19 9 views
0

Javaソースパッケージの構造を変更したので、ファイルオープン関数のいくつかはもう動作したくありません。いくつかのリソース(アイコン、プロパティファイルなど)をMyProject\res\からMyProject\src\res\に移動しました。ソースパッケージツリーに格納されたファイルを開くことができません

私はファイルパス文字列の代わりにthis.getClass().getResourceAsStream("icon.png")を使うべきだと思いますが、わかりません。ここで

は、私は、リソースの場所を変更する前に、私はアイコンファイルにアクセスする方法である:

private final static String iconSourcePath = "file:res/icon/icon.png"; 

primaryStage.getIcons().add(new Image(iconSourcePath)); 

は、Javaでのファイルへのアクセスのためのルールはありますか?要求されたファイルがソースファイルまたは外部にある場合

編集:これは私が見つけた解決策です。

最も簡単な方法は、srcフォルダに相対的な絶対パスを指定することです。

例えば、私のプロジェクトで、私はこのフォルダ階層を持っている:

src 

    META-INF 
    MANIFEST.MF 

    res 
    icon 
     icon.png 
    lang 
     MessageBundle 
     MessageBundle_en.properties 
     MessageBundle_fr.properties 
    pref 
     AppProperties 
     Properties.properties 

    simulation 
    log 
     Console.java 
    views 
     settingsWindows 
     settingsWindows.fxml 
     SettingsWindows_Controller.java 
     simulation 
     simulation.fxml 
     Simulation_Controller.java 
     toolBar 
     toolBar.fxml 
     ToolBar_Controller.java 
    Simulation.java 

    Main.java 

私は(JavaFXの中で)SettingsWindows_Controller.javaicon.pngを追加する必要がある場合は、私はそのようにこれを行います。

private final static String iconSourcePath = "/res/icon/icon.png"; 

stage.getIcons().add(new Image(iconSourcePath)); 

そして、私は任意のファイルにtoolBar.fxmlをロードする場合、私はそれを行います。

private final static String fxmlSourcePathToolBar = "/simulation/views/toolBar/toolBar.fxml"; 

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(fxmlSourcePathToolBar)); 

このメソッドを使用すると、デバッグモード(IDE)およびJARファイルで動作します。

答えて

0

現在のクラスの位置を取得するには、getResourceAsStream関数を使用してください。

ImageFactory.class.getResourceAsStream("image.png"); 

ImageFactoryクラスが存在しているフォルダの中に存在コードをロードした画像上では、あなたのイメージが別のフォルダにある場合、その前のフォルダを移動して、それぞれの子フォルダを取得するには..および/演算子を使用します。たとえば。

+0

ルートパッケージから絶対パスを使用することはできますか? 'src/res/...'のように、 '../'を付けない? –

+0

@ArmandDelessert: 'System.getProperty(" user.dir ")'は、あなたが現在のプロジェクトのabsouteパスを取得するのに役立ちます。あなたのルートパッケージの背後にある1つのフォルダ。 –

+0

これは動作しません。私は 'getClass()。getResource(fxmlSourceName)'で有効なURLを取得しようとしますが、JARファイルを実行すると常に 'null'を返します。デバッグモードでは正常に動作します...私は、ファイルパス/名前機構の背後にある論理を理解していません。 –

関連する問題