Reputation: 23045
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!
Upvotes: 2
Views: 1555
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
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