PeakGen
PeakGen

Reputation: 23045

Unable to add the CSS file

Please have a look at the following code of JavaFX and 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");
        }
    }
}

Login.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);
}

When I run this, I am getting the following error.

Exception in Application start method Exception in thread "main" java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source) at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source) at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.NullPointerException at helloworld.Login2.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(Unknown Source) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source) at com.sun.glass.ui.win.WinApplication$2$1.run(Unknown Source) ... 1 more Java Result: 1

The uploaded image shows my folder structure.

Why I am getting this error? I can't understand! This is my third JavaFX code anyway. Please help!

enter image description here

Upvotes: 2

Views: 1555

Answers (2)

Uluk Biy
Uluk Biy

Reputation: 49215

In Netbeans, with default project settings, most of time when the non java resource files are added to the package structure, the project needs to be rebuilded from the scratch. This way new resources will be copied to the "build" folder where the compiled java files are stored and run (without NullPointerException). The rebuild can be done by right clicking the project and doing "Clean and Build".

Upvotes: 3

Bobulous
Bobulous

Reputation: 13169

I have to agree that package structure is a bit tricky, as it's too easy to forget how it's done and have to spend an hour reading examples online to get your necessary structure to work.

I would try the following. Create a new package called helloworld.support (or some other suitable name) and then move the CSS file into there. Then you should be able to load it by calling:

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

(rest of the surrounding statement removed for clarity).

The reason I would move the CSS file out of the source package is that I realised a few months ago that every time I used "Clean & Build" (in Netbeans 7) it would delete any non-Java files from my source package, so all of my images were being lost and I've have to move them back in again. Once I gave the images their own package Netbeans left them alone.

Upvotes: 1

Related Questions