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.java
でicon.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ファイルで動作します。
ルートパッケージから絶対パスを使用することはできますか? 'src/res/...'のように、 '../'を付けない? –
@ArmandDelessert: 'System.getProperty(" user.dir ")'は、あなたが現在のプロジェクトのabsouteパスを取得するのに役立ちます。あなたのルートパッケージの背後にある1つのフォルダ。 –
これは動作しません。私は 'getClass()。getResource(fxmlSourceName)'で有効なURLを取得しようとしますが、JARファイルを実行すると常に 'null'を返します。デバッグモードでは正常に動作します...私は、ファイルパス/名前機構の背後にある論理を理解していません。 –