2016-09-21 9 views
0

私はこのような画像オブジェクトを作成しようとしている:は、ファイルを使用せずに相対ファイルパスで画像オブジェクトを作成できません:プレフィックス

Image img = new Image("images/jack.png"); 

または

Image img = new Image("jack.png"); 

または/jack.pngまたは/images/jack.pngなど

System.getProperty("user.dir")を使用して作業ディレクトリを検索しましたが、実際にイメージファイルを置く場所です。私はfile:接頭辞を使用する場合、それはそうのように、作業を行います。

Image img = new Image("file:images/jack.png"); 

しかし、またそれを使用せずに動作するようになっています。教科書では、それはfile:なしで行われます。私はそれなしで動作する他のコードを見てきました。

連鎖例外の束の終わりに

、それは言う:

Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found

私もOpenJDKからソースコードを読みしようとしましたが、多くの方法がネイティブだったので、私は何かを把握でき、から何をI私はそれがうまくいかなかったのか分かりませんでした。また、私は同じ方法でファイルを作成することができます、私はイメージを作成することはできません。たとえば、次のようになります。

File file = new File("fileName.txt"); 

この問題の原因は何ですか。修正するにはどうすればよいですか。

NetBeansを使用しています。

+0

あなたのイメージをプロジェクトのリソースフォルダに入れないのはなぜですか?その後、相対パスで作業することができます –

+0

@ArthurEirich私はそれがどうしてうまくいかないのか知っていますか? – Haggra

答えて

0
File file = new File("name.txt"); 

はどこかにファイルを作成します。既存のファイルを読み取るのではありません。

Image image = new Image("pathToImage.png"); 

既存の画像を読み取ろうとしています。どこかに格納されたイメージを読むためには、プロトコル(httpfileftpなど)を必要とする絶対パスか、プロジェクトのリソースディレクトリのようなイメージを 'known'ディレクトリに置く必要があります。 Javaソースがsrc/main/javaの下にあるとします。リソースディレクトリはsrc/main/resourcesです。あなたのイメージをそこに置き、src/main/resourcesに相対パスで作業してみてください。

2

System.getProperty("user.dir")は作業ディレクトリを返しません。ユーザーディレクトリを返します。
作業ディレクトリに対する相対パスは、Fileコンストラクタ内の相対ファイルパスを使用して指定できます。しかし、作業ディレクトリに頼るのは悪い習慣です。 NetBeansからアプリケーションを起動すると、作業ディレクトリがプロジェクトディレクトリになりますが、そうではありません。別の方法で起動した場合。

したがって、アプリケーションで必要な画像をjarファイルに追加する必要があります。
この場合、画像URLClass.getResource()で取得できます。 (toExternalForm()を使用してStringに変換してください。)

イメージファイルを参照するFileを持っている場合は、URLを取得するためにFileインスタンスを使用することができます。

File file = ... 
String urlString = file.toURI().toURL().toExternalForm(); 

これらのURLはImageコンストラクタで使用することができます。


File file = new File("fileName.txt"); 

ことはファイルを作成できません。単にファイルパスを表します。このファイルは存在する場合と存在しない場合があります。単にFileコンストラクタを呼び出すだけでは、新しいコンストラクタは作成されません。

関連する問題