Eu estou tentando fazer minha primeira interface javafx, usando o Scene Builder, e está dando esse erro
> Exception in Application start method
java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) 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(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 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$154(LauncherImpl.java:182) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NullPointerException: Location is required. at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) at chogiwrite.Chogiwrite.start(Chogiwrite.java:27) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(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$147(WinApplication.java:177) ... 1 more Exception running application chogiwrite.Chogiwrite
Essa é a classe principal
package chogiwrite;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
public class Chogiwrite extends Application {
private static Stage palco;
private static Scene cenaPrincipal;
private static Scene cenaCadastro;
@Override
public void start(Stage palcoPrincipal) throws Exception {
try {
palco = palcoPrincipal;
palcoPrincipal.setTitle("Chogiwrite");
palcoPrincipal.getIcons().add(new Image("file:imagens/CHOGIWRITTING-02.png"));
Parent fxmlPrincipal = FXMLLoader.load(getClass().getClassLoader().getResource("FXMLDocument.fxml"));
cenaPrincipal = new Scene(fxmlPrincipal, 642, 414);
Parent fxmlCadastro = FXMLLoader.load(getClass().getResource("src/chogwrite/telaCadastro/TelaCadastroFXML.fxml"));
cenaCadastro = new Scene(fxmlCadastro, 642, 414);
palcoPrincipal.setScene(cenaPrincipal);
palcoPrincipal.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void mudaTela(String tela) {
switch (tela) {
case "principal":
palco.setScene(cenaPrincipal);
break;
case "cadastro":
palco.setScene(cenaCadastro);
break;
}
}
public static void main(String[] args) {
launch(args);
}
}
Essa é a classe controladora
package chogiwrite;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.ImageView;
import componentes.*;
import controle.*;
import projetos.*;
public class FXMLDocumentController implements Initializable {
ControleContas controlando = new ControleContas();
@FXML
private Label label;
@FXML
private TextField campoUsuario;
@FXML
private TextField campoSenha;
@FXML
private Button botaoCadastro;
@FXML
private Button botaoAcesso;
@FXML
private Button botaoEsqueceuSenha;
@FXML
private ImageView logoChogiwrite;
@FXML
private Label faltaUsuarioSenha;
@FXML
private Label senhaIncorreta;
@FXML
private Label contaInexistente;
@FXML
void acessarConta(ActionEvent event) {
String usuario = campoUsuario.getText();
String senha = campoSenha.getText();
if (usuario.isEmpty() || senha.isEmpty()) {
faltaUsuarioSenha.setOpacity(1);
} else
if (usuario.equals(controlando.retornarUsuario(usuario).getNomeUsuario())) {
if (senha.equals(controlando.retornarUsuario(usuario).getSenha())) {
Chogiwrite.mudaTela("muda telaaaaaaa");
}
else {
senhaIncorreta.setOpacity(1);
}
contaInexistente.setOpacity(1);
}
}
@FXML
void cadastrarConta(ActionEvent event) {
Chogiwrite.mudaTela("cadastro");
}
@FXML
void descobrirSenha(ActionEvent event) {
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
E esse aqui é o documento fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.effect.Blend?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>
<AnchorPane id="AnchorPane" prefHeight="414.0" prefWidth="634.0" style="-fx-background-color: #29088A;" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/9.0.1" fx:controller="chogiwrite.FXMLDocumentController">
<children>
<Label fx:id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="69" />
<TextField fx:id="campoUsuario" layoutX="236.0" layoutY="184.0" promptText="Usuario">
<font>
<Font size="14.0" />
</font>
</TextField>
<Label layoutX="435.0" layoutY="23.0" text="Não é um usuário?" textFill="#dadada" />
<Button fx:id="botaoCadastro" layoutX="541.0" layoutY="19.0" mnemonicParsing="false" onAction="#cadastrarConta" style="-fx-background-color: #642EFE;" text="Cadastre-se" textFill="WHITE" />
<Button fx:id="botaoAcesso" layoutX="284.0" layoutY="314.0" mnemonicParsing="false" onAction="#acessarConta" prefHeight="25.0" prefWidth="79.0" style="-fx-background-color: #642EFE;" text="Acessar" textFill="WHITE" />
<Button fx:id="botaoEsqueceuSenha" layoutX="251.0" layoutY="363.0" mnemonicParsing="false" onAction="#descobrirSenha" prefHeight="25.0" prefWidth="145.0" style="-fx-background-color: #29088A #29088A;" text="Esqueceu a senha?" textFill="WHITE" />
<Label fx:id="faltaUsuarioSenha" layoutX="251.0" layoutY="145.0" opacity="0.0" prefHeight="17.0" prefWidth="145.0" text="Digite o usuário e a senha!" textAlignment="CENTER" textFill="WHITE" />
<Label fx:id="senhaIncorreta" layoutX="279.0" layoutY="145.0" opacity="0.0" prefHeight="17.0" prefWidth="89.0" text="Senha incorreta!" textAlignment="CENTER" textFill="WHITE" />
<Label fx:id="contaInexistente" layoutX="264.0" layoutY="147.0" opacity="0.0" prefHeight="17.0" prefWidth="120.0" text="Essa conta não existe!" textAlignment="CENTER" textFill="WHITE" />
<PasswordField fx:id="campoSenha" layoutX="236.0" layoutY="240.0" prefHeight="25.0" prefWidth="175.0" promptText="Senha">
<font>
<Font size="14.0" />
</font>
</PasswordField>
<ImageView fx:id="logoChogiwrite" fitHeight="150.0" fitWidth="200.0" layoutX="217.0" layoutY="56.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../../imagens/CHOGIWRITTING-05.png" />
</image>
<effect>
<Blend />
</effect>
</ImageView>
</children>
</AnchorPane>