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

JavaFX Maven InvocationTargetException

Object Storage Arubacloud
0 głosów
802 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,280 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,280 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,109 wizyt
0 głosów
0 odpowiedzi 213 wizyt
pytanie zadane 28 listopada 2020 w Java przez Amakesh Nowicjusz (220 p.)
0 głosów
3 odpowiedzi 336 wizyt
pytanie zadane 21 września 2019 w Java przez Uwegi Początkujący (430 p.)

92,555 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,941 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...