JavaFX Image コンストラクターの相対パス解決アルゴリズムの目的を知りたいです。
- スタンドアロン アプリ。
- ブラウザでデプロイされたアプリ。
- Webstart でデプロイされたアプリ。
アルゴリズムが複数の場所にある可能性がある場合は、上記の展開シナリオごとにそれらが何であるかを知りたい.
アプリが jar に配置されたときにスタンドアロン アプリの動作が異なる場合は、それも知りたいです。
次に、ユーザーはそれへの相対パスを提供します。new Image(String url)
これは、別名アプリの workdir に対して相対的になります。System.getProperty("user.dir")
javaws myfxapp.jnlp
) から実行される web-start アプリの場合、スタンドアロン アプリと同じように機能します。したがって、一般的な方向性は次のとおりです。スタンドアロン アプリの場合は、 で使用するurl
のと同じ方法を使用しますnew File(String url)
。jnlp/plugin の場合、プロトコルまたはClass.getResource()
アプローチで完全な URL を使用します。
更新:注意してください、この動作は 2.2 で明確化および変更される予定です。http://javafx-jira.kenai.com/browse/RT-18291を参照してください。
次のコメントは RT-18291 からのもので、2.2 の意図した変更の概要を示しています。
Martin Sladecek がコメントを追加しました - 2012 年 5 月 15 日 10:53 AM Richard Bair との話し合いの後、現在の (文書化されていない) パスの動作を変更することにしました。現在、それらは user.dir 相対として扱われます。先頭のスラッシュの有無にかかわらず、すべてのパスがクラスパスに対して相対的に解決されるようになりました。これは CSS と一貫性があり、ユーザーが期待するものにより多く対応します。user.dir 相対パスの場合、「file:」URL は引き続き使用できます。
を使用している場合、答えは「/」ですgetClass().getResourceAsStream()
。つまり、jar ファイルのルート (その中) です。user.dir やパッケージがホストされている場所ではありません
getClass().getName().toString()
) が存在するディレクトリを検索し、そこに画像をコピーして貼り付けます。Image image=new Image(getClass().getResourceAsStream("yourImageName.jpg"));
必須です。NetBeans では、クラスが存在するディレクトリ NetBeansProjects/JavaFXProjectName/build/classes/packageName/