Bom dia galera,
Estou começando a estudar sobre JavaFx, procurando aprender através do livro da Casa do Código sobre esse assunto, porem logo nos exercicios iniciais já me deparei com a dificuldade de conseguir rodar uma aplicação, gostaria de pedir os amigos um apoio para descobrir o problema, segue o código abaixo:
`
import javax.swing.JOptionPane;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class LoginApp extends Application {
private AnchorPane pane;
private TextField txLogin;
private PasswordField txSenha;
private Button btEntrar, btSair;
private static Stage stage;
@Override
public void start(Stage stage) throws Exception {
initComponents();
initLayout();
initListeners();
Scene scene = new Scene(pane); // para exibir o form é necessário criar uma cena add o form nele
stage.setScene(scene);
// Remove a opção de maximizar a tela
stage.setResizable(false);
// Dá um título para a tela
stage.setTitle("Login - GolFX");
stage.show();
LoginApp.stage = stage;
}
public static Stage getStage() {
return stage;
}
private void initComponents() {
pane = new AnchorPane(); // criando um form
pane.setPrefSize(400, 300); // Indica a largura e altura do painel principal.
pane.setStyle("-fx-background-color: linear-gradient(from 0% 0% to 100% 100%, green 0%, silver 100%);"); // css no form
// criando uma caixa de texto
TextField txLogin = new TextField();
txLogin.setPromptText("Digite aqui seu login");
// criando uma caixa para senha
PasswordField txSenha = new PasswordField();
txSenha.setPromptText("Digite aqui sua senha");
// dois botões
Button btEntrar = new Button("Entrar");
Button btSair = new Button("Sair");
// add todos os componentes criados ao form
pane.getChildren().addAll(txLogin, txSenha, btEntrar, btSair);
}
private void initLayout() {
/* Posicionando os componentes no form */
// Node.getWidth() = Retorna a largura do componente.
txLogin.setLayoutX((pane.getWidth() - txLogin.getWidth()) / 2);
txLogin.setLayoutY(50);
txSenha.setLayoutX((pane.getWidth() - txSenha.getWidth()) / 2);
txSenha.setLayoutY(80);
btEntrar.setLayoutX((pane.getWidth() - txSenha.getWidth()) / 2);
btEntrar.setLayoutY(120);
btSair.setLayoutX(180);
btSair.setLayoutY(120);
}
private void initListeners() {
//metodo indicará a ação do botão
/*
btSair.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
fecharAplicacao();
}
});
*/
/*
btEntrar.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
logar();
}
});
*/
}
private void fecharAplicacao() {
System.exit(0);
}
private void logar() {
if (txLogin.getText().equals("admin") && txSenha.getText().equals("casadocodigo")) {
try {
new VitrineApp().start(new Stage());
LoginApp.getStage().close();
}
catch (Exception e) {
e.printStackTrace();
}
}
else {
JOptionPane.showMessageDialog(null, "Login e/ou senha inválidos", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String[] args) {
launch(args); // vem da classe Application e faz com que o form possa ser exibido
}
}
`
O erro que está ocorrendo ao executar a aplicação é o seguinte:
`
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at LoginApp.initLayout(LoginApp.java:79)
at LoginApp.start(LoginApp.java:26)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
... 1 more
Exception running application LoginApp
`
Desde já agradeço por qualquer ajuda.