• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JavaFX Maven InvocationTargetException

VPS Starter Arubacloud
0 głosów
1,013 wizyt
pytanie zadane 28 grudnia 2018 w Java przez NyguseK Użytkownik (650 p.)
edycja 28 grudnia 2018 przez NyguseK

Witam,

zacząłem pisać większy projekt. Po napisaniu klasy odpowiedzialnej za logowanie i rejestrację postanowiłem sprawdzić jak to działa w połączeniu z JavaFX. Niestety od wczoraj próbuję rozwiązać problem związany z odpalaniem okienka logowania. Proszę o pomoc. Przeszukałem sporo tematów na różnych forach, ale nic nie pomogło. Jest to mój pierwszy projekt z wykorzystaniem Mavena. Poniżej załączam błędy jakie wyskakują oraz kod.

 

Exception in Application start method
java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
Caused by: java.lang.RuntimeException: Exception in Application start method
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:973)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:198)
	at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.NullPointerException: Location is required.
	at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3246)
	at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3210)
	at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
	at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
	at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3129)
	at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3122)
	at main.Login.start(Login.java:16)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:919)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
	... 1 more
Exception running application main.Login

 

Klasa główna - Login

package main;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Login extends Application {
    public Login() {
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        System.out.println("too");
        Parent root = FXMLLoader.load(this.getClass().getResource("../fxmlFile/login.fxml"));
        primaryStage.setTitle("Quiz");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

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

Controller

 

package controllers;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;

import java.net.URL;
import java.util.ResourceBundle;

public class LoginController implements Initializable {

    @FXML
    public AnchorPane anchorPane;
    @FXML
    public TextField txtfUsername;
    @FXML
    public PasswordField pfPassword;
    @FXML
    public Label lbInfo;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        while(true);
    }

    @FXML
    public void clickPassword(ActionEvent actionEvent) {
    }
    @FXML
    public void clickZaloguj(ActionEvent actionEvent) {
    }
}

 

login.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.layout.AnchorPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>

<AnchorPane fx:id="anchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: #d6d6d6;" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.LoginController">
    <children>
        <Pane layoutX="100.0" layoutY="50.0" prefHeight="311.0" prefWidth="400.0" style="-fx-background-color: #d6d6d6;">
            <children>
                <TextField fx:id="txtfUsername" layoutX="123.0" layoutY="76.0" promptText="Nazwa użytkownika">
               <font>
                  <Font name="Microsoft New Tai Lue" size="12.0" />
               </font></TextField>
                <PasswordField fx:id="pfPassword" layoutX="124.0" layoutY="131.0" onAction="#clickPassword" promptText="Hasło">
               <font>
                  <Font name="Microsoft Tai Le" size="12.0" />
               </font></PasswordField>
                <Button layoutX="168.0" layoutY="187.0" mnemonicParsing="false" onAction="#clickZaloguj" text="Zaloguj" textFill="WHITE">
               <font>
                  <Font name="System Bold" size="13.0" />
               </font></Button>
            <Label layoutX="147.0" layoutY="-14.0" text="Zaloguj się" textFill="WHITE">
               <font>
                  <Font name="Impact" size="24.0" />
               </font>
            </Label>
            <Label fx:id="lbInfo" alignment="CENTER" contentDisplay="CENTER" layoutX="83.0" layoutY="29.0" prefHeight="20.0" prefWidth="234.0" textFill="RED">
               <font>
                  <Font size="14.0" />
               </font>
            </Label>
            </children>
        </Pane>
    </children>
</AnchorPane>

 

pom.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>Szklarnia</groupId>
    <artifactId>Szklarnia</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>Quiz</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc7</artifactId>
            <version>7.0.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>11</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>11</version>
        </dependency>


    </dependencies>
    <build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.7.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>main.java.main.Login</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

1 odpowiedź

+1 głos
odpowiedź 28 grudnia 2018 przez mbabane Szeryf (79,300 p.)
wybrane 28 grudnia 2018 przez NyguseK
 
Najlepsza

Czepia Ci się o:

 Parent root = FXMLLoader.load(this.getClass().getResource("../fxmlFile/login.fxml"));
Caused by: java.lang.NullPointerException: Location is required.
....
.....
    at main.Login.start(Login.java:16)
.....
.....
....

 

Spróbuj zapisać to tak:

Parent root = FXMLLoader.load(this.getClass().getResource("/fxmlFile/login.fxml"));

Jeśli nadal nie będzie działać to umieść plik fxmlFile/login.fxml w katalogu resources.

Ale nawet jak zadziała bez przenoszenia do resources to zrób to, ponieważ dzięki temu oddziela się kod Javy od fxml.

komentarz 28 grudnia 2018 przez NyguseK Użytkownik (650 p.)
Probowalem to zrobić wcześniej, ale nie działało. Spróbuję jak będę w domu.

A jak powinien się nazywac plik w którym sa te fxmle? To jest istotne?
komentarz 28 grudnia 2018 przez mbabane Szeryf (79,300 p.)
Z technicznego punktu widzenia, nie.

Ale jesteś pewny, że dokładnie tak robiłeś bo to się też czepia jak nie dasz znaku "/" w ścieżce, na pierwszym miejscu.
komentarz 28 grudnia 2018 przez NyguseK Użytkownik (650 p.)
Działa :) Wcześniej jednak brakło mi chyba tego /

Dziękuję bardzo za pomoc! :)

Podobne pytania

0 głosów
1 odpowiedź 1,185 wizyt
0 głosów
0 odpowiedzi 227 wizyt
pytanie zadane 28 listopada 2020 w Java przez Amakesh Nowicjusz (220 p.)
0 głosów
3 odpowiedzi 390 wizyt
pytanie zadane 21 września 2019 w Java przez Uwegi Początkujący (430 p.)

93,015 zapytań

141,978 odpowiedzi

321,271 komentarzy

62,358 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...