2016-03-21 20 views
0

は、私は次のスニペットで、私のJavaFX appllicationにCSSファイルを組み込むようにしようとしている作品:ファイル読み込みのgetResource()が失敗し、ファイルは()

public void loadExternalCSS() { 
     System.out.println("CLASSPATH: "+System.getProperty("java.class.path")); 
     try{ 
     skinCSS = getClass().getResource("css/default_skin.css").toExternalForm(); 
     } 
     catch(Exception e){ 
      System.err.println("Exception: " + e); 
      e.printStackTrace(System.err); 
     } 
} 

利回り、実行時に:

java.lang.NullPointerException 
    at 
robotikosanomologitos.RobotikosAnomologitos.loadExternalCSS(RobotikosAnomologitos.java:529) 
    at robotikosanomologitos.RobotikosAnomologitos.start(RobotikosAnomologitos.java:491) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 

奇妙なことは、この機能上の数行が、私はpropertiesファイルから読み込み、小さな機能を持っているということです。

public void readPropertiesFile() { 
     Properties props = new Properties(); 
     InputStream is; 
     try { 
      File f = new File("properties"); 
      is = new FileInputStream(f); 
     } 
     /* etcetera */ 
} 

これは魅力的です。 propertiesファイルはC:\~my_projects_folder~\RobotikosAnomologitos

ソリューションの周りを検索した後、私はgetClass().getResource()試みは、クラスパス内のリソースを見つけるためにいるのを見、プロジェクトディレクトリのルートにあります。私は毎回クラスパスを印刷しようとしましたが、私は得る: RobotikosAnomologitos\dist\run125323585\RobotikosAnomologitos.jarこれは十分に論理的です。

プログラムを実行しているときにこの一時フォルダを見た後、私はcssフォルダもcssファイルも見つけられません。

しかし、このファイルは実際に私の作業プロジェクトディレクトリのRobotikosAnomologitos\css\default_skin.cssにあります。なんらかの理由で、実行時にクラスパスにそれを作成せず、見つけたときにgetResource()がnullを返すようにします。

これを含める方法はありますか?


EDIT:私はsrcパッケージの下css/default_skin.cssをも置かれていることを言及するのを忘れてしまった、とNetBeansのパッケージツリー(src/css/default_skin.css)に表示されます。

同じように、getClass().getResourceAsStream()で細かくロードされるsrc/graphics/の下にあるグラフィックがあります。 cssファイルが見つからない理由についても私には戸惑う。たぶんjarでコンパイルされないのでしょうか?

+0

クラスパス上のリソースをファイルとして使用しないでください!これは明らかに機能しません。実行時にjarファイルに 'File'はありません。リソースを使用する。 – fge

+0

@DimitrisSfounis getClass()。getResource( "/ css/default_skin.css")。toExternalForm();またはgetClass()。getClassLoader()。getResource( "css/default_skin.css") .toExternalForm(); ' –

+0

@MadhusudanaReddySunnapu両方のダイスを試してみました。 –

答えて

0

あなたは、あなたがクラスのgetResource()を呼び出し、/を付加しない場合は、パスがクラスのパッケージへの相対的であると考えられてgetClass().getResource("css/default_skin.css").toExternalForm();

+0

どうすればいいですか?グラフィックスやプロパティファイルをアプリケーションにロードするときに、なぜこれを行う必要はありませんでしたか? –

+0

eclipseから実行している場合、 'properties - > Java build path'に移動し、ソースフォルダーを追加する必要があります。アプリケーションをパッケージ化する場合は、パッケージツールの仕様に従ってjarファイルに入るようにcssフォルダを指定する必要があります。 –

+0

'css/default_skin.css'フォルダが' src'パッケージの下にあることを忘れていました。同様に 'getClass()。getResourceAsStream()'によってもうまく読み込まれる 'graphics'と同じ方法です。 –

1

を使用して取得したい場合はclasspathcssフォルダを追加する必要があります。

あなたが適切にクラスパスにリソースを追加した場合、これは動作するはずです:

skinCSS = getClass().getResource("/css/default_skin.css").toExternalForm(); 
+0

これは動作しません。つまり、CSSパスファイルをクラスパスに正しく追加していない可能性があります。 –

+0

@DimitrisSfounis: 'ビルド'フォルダまたは 'dist'のjarファイルを' Files'ビューでチェックしてください。これにより、ファイルが存在するかどうかを確認することができます。 – fabian

+0

cssファイルは 'build/classes/css/default_skin.css'の下にあります。 –

0

チェックあなたはCSSファイルのバイナリエンコードを使用していない場合は(プロジェクトのプロパティ>包装を参照してください)。使用している場合、上記のファイル拡張子は ".bss"にする必要があります。

+0

「バイナリエンコードJavaFX CSSファイル」が選択されています。 –

+0

したがって、次を試してください: 'skinCSS = getClass()。getResource(" css/default_skin.bss ")。toExternalFor m();' –

関連する問題