2

以下の JavaFX と CSS のコードを見てください。

Login2.java

package helloworld;

import javafx.application.Application;
import javafx.stage.*;
import javafx.scene.*;
import javafx.event.*;
import javafx.geometry.Pos;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;

public class Login2 extends Application
{
    private Text welcome, message;
    private Label userName, password;
    private Button btn;
    private GridPane grid;
    private TextField userNameField;
    private PasswordField passwordField;
    private Scene scene;
    private HBox hbox, hbox2;



    public static void main(String[]args)
    {
        launch(args);
    }

    @Override
    public void start(Stage stage)
    {
        //Intializing instance Varaibles
        welcome = new Text("Welcome");
        message = new Text();

        userName = new Label("User Name: ");
        password = new Label("Password: ");

        btn = new Button("Submit");
        btn.setOnAction(new Action());

        userNameField = new TextField();
        passwordField = new PasswordField();

        grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setVgap(10);
        grid.setHgap(10);


        //Creating the GUI

        hbox = new HBox();
        hbox.getChildren().add(btn);
        hbox.setAlignment(Pos.BOTTOM_RIGHT);

        hbox2 = new HBox();
        hbox2.getChildren().add(message);
        hbox2.setAlignment(Pos.BOTTOM_RIGHT);

        grid.add(welcome,0,0);
        grid.add(userName,0,1);
        grid.add(userNameField,1,1);
        grid.add(password,0,2);
        grid.add(passwordField,1,2);
        grid.add(hbox,1,3);
        grid.add(hbox2,1,4);



        scene = new Scene(grid,300,275);


        stage.setTitle("Welcome Form");
        stage.setScene(scene);

        scene.getStylesheets().add(Login2.class.getResource("Login.css").toExternalForm());
        stage.show();
    }

    private class Action implements EventHandler<ActionEvent>
    {
        public void handle(ActionEvent ae)
        {
            message.setFill(Color.CRIMSON);
            message.setText("You pressed the button");
        }
    }
}

ログイン.css

/* 
    Document   : Login
    Created on : Jul 14, 2012, 8:04:31 PM
    Author     : Yohan
    Description:
        Purpose of the stylesheet follows.
*/

.root {

   -fx-background-image: url(Desert.jpg);
}

これを実行すると、次のエラーが発生します。

アプリケーション開始メソッドの例外 スレッド「メイン」の例外com.sun.javafx.application.LauncherImpl$1.run での $000 (不明なソース) java.lang.Thread.run(Thread.java:722) での実行 (不明なソース) 原因: helloworld.Login2 での java.lang.NullPointerException。 start(Login2.java:80) at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source) at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source) at com.sun.javafx.application .PlatformImpl$3.run(不明なソース) com.sun.glass.ui.win.WinApplication._runLoop(ネイティブ メソッド) com.sun.glass.ui.win.WinApplication.access$100(不明なソース) at com.sun.glass.ui.win.WinApplication$2$1.run(不明なソース) ... 1 以上 Java 結果: 1

アップロードされた画像は、私のフォルダー構造を示しています。

なぜこのエラーが発生するのですか? 理解できません!とにかく、これは私の 3 番目の JavaFX コードです。助けてください!

ここに画像の説明を入力

4

2 に答える 2

3

Netbeans では、デフォルトのプロジェクト設定では、ほとんどの場合、Java 以外のリソース ファイルがパッケージ構造に追加されると、プロジェクトを最初から再構築する必要があります。このようにして、新しいリソースは、コンパイルされた Java ファイルが格納されて実行される "build" フォルダーにコピーされます (NullPointerException なし)。再構築は、プロジェクトを右クリックして「クリーン アンド ビルド」を実行することで実行できます。

于 2012-07-14T16:16:30.013 に答える
1

パッケージ構造が少しトリッキーであることには同意しなければなりません。なぜなら、それがどのように行われたかを簡単に忘れてしまい、必要な構造を機能させるためにオンラインで例を読むのに 1 時間も費やす必要があるからです。

私は次のことを試してみます。helloworld.support(または他の適切な名前) という名前の新しいパッケージを作成し、そこに CSS ファイルを移動します。次に、次のように呼び出してロードできるはずです。

Login2.class.getResource("/helloworld/support/Login.css")

(明確にするために、周囲のステートメントの残りの部分は削除されています)。

CSS ファイルをソース パッケージから移動する理由は、(Netbeans 7 の)「Clean & Build」を使用するたびにソース パッケージから Java 以外のファイルが削除されることに数か月前に気づいたからです。すべての画像が失われていたため、再度移動する必要がありました。イメージに独自のパッケージを与えると、Netbeans はそれらを放っておきました。

于 2012-07-14T15:37:33.307 に答える