言語:JavaFX
IDE:Netbeans
問題:CSSファイルをスタイルシートに追加しようとしていますが、次のコードの最初の行で常にNullPointerException
が生成されます。
String css = this.getClass().getResource("double_slider.css").toExternalForm();
scene.getStylesheets().add(css);
「double_slider.css」をフルパスに置き換えてみました。 double_slider.cssは現在、この呼び出しを行うクラスと同じパッケージにあります。 http://introjava.wordpress.com/2012/03/21/linking-a-css-style-sheet-to-javafx-にあるすべてのバリエーションも試しましたscene-graph / 、成功しませんでした。クリーンアップとビルドはどちらも役に立ちません。
.classファイルがダンプされるビルドフォルダーにcssファイルを配置すると、NullPointerExceptionがなくなります。しかし、cssファイルはプロジェクト内の他のファイルを参照しているため、正しく機能しません。
あなたのyourname.css
srcディレクトリ直下のファイル。
scene.getStylesheets().add("yourname.css")
クリーンでビルドが必要
CSSファイルが見つからない原因となるスラッシュがないと思います。パス参照を修正してください。
例えば:
-root
--app/Main.Java
--assets/double_slider.css
だろう:
String css = this.getClass().getResource("/assets/double_slider.css").toExternalForm();
私も同じ問題を抱えていました。 Win7ではNetBeans 7.3とJavaFX 2.2.7、JDK 7.0_21を使用しています。
私の解決策は、.cssを[〜#〜] same [〜#〜]フォルダーに配置することでした。私のJavaを含むファイルvoid start(ステージステージ)。したがって、プロジェクトビューは次のようになります。
(したがって、CSSファイルは[〜#〜] in [〜#〜]パッケージですが、これは本当に奇妙で禁忌です。一部のドキュメントでは、プロジェクトのルートに配置して、実行時に見つけることができましたが、NBでは動作しませんでした。「start(..)」を含むファイルを Ctrl+U または、プロジェクトのコンテキストメニューで[実行]をクリックします。また、NBすべてをJARに入れるかどうか)は問題ではありません。
上記の状況でCSSをロードするコードは次のとおりです。
URL url = this.getClass().getResource("controlStyle1.css");
if (url == null) {
System.out.println("Resource not found. Aborting.");
System.exit(-1);
}
String css = url.toExternalForm();
scene.getStylesheets().add(css);
これが機能しなかったのに対し:
scene.getStylesheets().add("controlStyle1.css");
お役に立てれば。
同じ問題が(NetBeans 8で)ありました。私はここで解決策を見つけました: https://blog.idrsolutions.com/2014/04/use-external-css-files-javafx/
私のリソースファイルspreadsheet.cssはここにありました:
MyApp
-resources
--spreadsheet.css
-source packages
--fr.ccc.myapp.view
---mainView.Java
---FXMLMain.fxml
MainView.Javaで:
File f = new File("resources/spreadsheet.css");
spreadsheet.getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/"));
お役に立てれば。
小さなログインの例を作成しました。これが私のstyleshet.cssをリンクする方法です
_@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("LoginUI.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(JavaFXLogin.class.getResource("stylesheet.css").toExternalForm());
stage.setScene(scene);
stage.show();
}
_
このコード行を使用してcssファイルをリンクできます。ただし、cssファイルはパッケージ内にある必要があります。
scene.getStylesheets().add(JavaFXLogin.class.getResource("stylesheet.css").toExternalForm());
このstylesheets = "@ your_relative_path/style.css"として、.fxmlファイルにルート要素の属性としてstyle.cssを直接追加できます。
Srcフォルダーにあるcssファイルにアクセスする場合は、@ ../style.cssを使用できます。
あなたの古いコードを考慮してください:
_String css =this.getClass().getResource("double_slider.css").toExternalForm();
scene.getStylesheets().add(css);
_
それをこの新しいコードに変更してみてください、それは動作します:
_screen.getStylesheets().add(getClass().getResource("double_slider.css").toExternalForm());
_
getClass()
を使用する場合、this
キーワードを使用する必要はありません。
この作業がうまくいくことを願っています。 :)
スタイルシートを設定する前にシーンオブジェクトを初期化しましたか?
scene = new Scene(myRootLayout、600、600); // 例えば
scene.getStylesheets().add("file:///home/fullpathname/file.css");
または
scene.getStylesheets().add("file:/home/fullpathname/file.css");
しかしその後:
プロジェクトの実行/クリーンおよびビルド
私のために働いた
NetBeans IDE 8.2; Java:1.8.0_201; Linux 16.04
うーん、あなたはNetbeansを使っていますか? "Clean and Build"プロジェクトを試してください。
ファイル構造が次のようなものであると想定します。
-ルート
-src
---リソース
---- double_slider.css
- -パッケージ
---- JavaFXFile.Java
これは私のために働いたものです:
scene.getStylesheets().add((new File("src/resources/double_slider.css")).toURI().toString());
MedicalLibraryFx.Java
scene.getStylesheets().add(getClass().getResource("/css/style.css").toString());
cssがコントローラーと同じディレクトリにある場合のフォルダー構造
scene.getStylesheets().add(getClass().getResource("style.css").toString());
ファイル名に「@」を付けてみてください。それは私のために働いた。
例: '@ main.css'
すべての回答に1つの非常に重要な部分がありません。それはcssファイルの名前の前の「/」です。
フォルダー構造:
src
resources
stylesheet.css
次のようにロードし、cssファイルの前に開始スラッシュを確認します。
scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm())
とてもシンプルです。
this.scene.setUserAgentStylesheet(/resources/blabla.css);
これは私のために働いたものです-
ファイル内。Javaこれを使用
Application.setUserAgentStylesheet(getClass().getResource("application.css")
.toExternalForm());