16

言語: JavaFX

IDE: ネットビーンズ

問題: スタイルシートに 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 ファイルはプロジェクト内の他のファイルを参照するため、正しく機能しません。

4

17 に答える 17

22

ファイルをsrcyourname.cssディレクトリの直下に置きます。

scene.getStylesheets().add("yourname.css")

クリーンアップとビルドが必要

于 2014-04-27T15:39:39.897 に答える
9

私も同じ問題を抱えていました。Win7 で NetBeans 7.3 と JavaFX 2.2.7、JDK 7.0_21 を使用しています。

私の解決策は、 .css を void start(Stage stage) を含む Java ファイルと同じフォルダーに配置することでした。したがって、プロジェクト ビューは次のようになります。

  • プロジェクト名
    • ソースパッケージ
      • pkgなんでも
        • Main.java
        • MyCssFile.css

(したがって、CSSファイルはパッケージ内にありますが、これは本当に奇妙で矛盾していると思います。実行時に見つけられるように、プロジェクトのルートに配置するように言われたドキュメントもありましたが、NBではうまくいきませんでした。+を押すか、プロジェクトのコンテキスト メニューで [実行] をクリックして、「 start(..)」を含むファイルを開始するかどうかに関係なく、アプリが実行されるようになりました。また、NB にすべてを JAR に入れるかどうかは関係ありません。)CtrlU

上記の状況で 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");

お役に立てれば。

于 2013-05-01T16:16:09.497 に答える
2

この stylesheets="@your_relative_path/style.css" のように、style.css をルート要素の属性として .fxml ファイルに直接追加できます。

src フォルダーにある css ファイルにアクセスする場合は、@../style.css を使用できます。

于 2016-01-29T12:21:53.417 に答える
0

うーん、あなたは Netbeans を使っていますか? プロジェクトの「クリーンとビルド」を試みます。

于 2012-12-19T08:46:16.443 に答える
0

ファイル.javaでこれを使用します

Application.setUserAgentStylesheet(getClass().getResource("application.css")
                .toExternalForm());
于 2015-11-20T14:01:23.510 に答える
0

スタイル シートを設定する前に、シーン オブジェクトを初期化しましたか?

シーン = 新しいシーン (myRootLayout, 600, 600); // 例えば

于 2012-12-19T22:22:21.077 に答える
0

ファイル構造が次のようなものであると仮定します:
-root
--src
---resources
----double_slider.css
---package
----JavaFXFile.java

これは私のために働いたものです:

scene.getStylesheets().add((new File("src/resources/double_slider.css")).toURI().toString());
于 2019-01-13T02:27:26.383 に答える