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

Błąd przy otwieraniu nowego okna - JavaFX

Object Storage Arubacloud
0 głosów
852 wizyt
pytanie zadane 17 sierpnia 2018 w Java przez Darek554 Użytkownik (980 p.)
zmienione kategorie 17 sierpnia 2018 przez criss

Cześć, tak jak w temacie.

Kiedy próbuję otworzyć nowe okno, wyskakuje mi taki błąd:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

Oto kod:

public void znajdzWindow(){
        Stage dialog = new Stage();
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("C:\\Users\\Rafał\\IdeaProjects\\Notepad\\src\\sample\\fxml\\ZnajdzWindow.fxml"));
        dialog.initOwner(poleTekstowe.getScene().getWindow());

        try {
            Parent root = loader.load(); // W tej linijce wyskakuje błąd

            dialog.setTitle("Znajdź");
            dialog.setScene(new Scene(root));
            dialog.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

FXML:

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.Pane?>

<Pane prefHeight="150.0" prefWidth="450.0" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.controllers.ZnajdzController">
   <children>
      <Label layoutX="32.0" layoutY="29.0" text="Znajdź:" />
      <TextField layoutX="68.0" layoutY="25.0" prefHeight="25.0" prefWidth="263.0" />
      <Button layoutX="342.0" layoutY="25.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="97.0" text="Znajdź następny" />
      <Button layoutX="343.0" layoutY="63.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="97.0" text="Anuluj" />
      <CheckBox layoutX="32.0" layoutY="89.0" mnemonicParsing="false" text="Uwzględnij wielkość liter" />
      <Label layoutX="248.0" layoutY="80.0" text="Kierunek" />
      <RadioButton layoutX="210.0" layoutY="106.0" mnemonicParsing="false" text="W górę" />
      <RadioButton layoutX="289.0" layoutY="106.0" mnemonicParsing="false" text="W dół" />
   </children>
</Pane>

Prosiłbym o pomoc :)

komentarz 17 sierpnia 2018 przez mbabane Szeryf (79,280 p.)
Wklej pełny stos wyjątku.
komentarz 18 sierpnia 2018 przez Darek554 Użytkownik (980 p.)
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.control.MenuItem.fire(MenuItem.java:462)
	at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405)
	at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
	at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
	at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416)
	at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
	at com.sun.glass.ui.View.notifyMouse(View.java:937)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
	at java.lang.Thread.run(Thread.java:748)
Caused by: 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 sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
	at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
	... 43 more
Caused by: java.lang.IllegalStateException: Location is not set.
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434)
	at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
	at sample.controllers.ZnajdzController.znajdzWindow(ZnajdzController.java:26)
	at sample.controllers.MainController.znajdzWindow(MainController.java:81)
	... 53 more

 

komentarz 18 sierpnia 2018 przez mbabane Szeryf (79,280 p.)
Wklej jeszcze pliki ZnajdzController i MainController
komentarz 18 sierpnia 2018 przez Darek554 Użytkownik (980 p.)
package sample.controllers;

import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import sample.PoleTekstowe;

import java.io.IOException;

public class ZnajdzController {

    private PoleTekstowe poleTekstowe;

    public ZnajdzController(PoleTekstowe poleTekstowe){
        this.poleTekstowe = poleTekstowe;
    }

    public void znajdzWindow(){
        Stage dialog = new Stage();
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("C:\\Users\\Rafał\\IdeaProjects\\Notepad\\src\\sample\\fxml\\ZnajdzWindow.fxml"));
        dialog.initOwner(poleTekstowe.getScene().getWindow());

        try {
            Parent root = loader.load();

            dialog.setTitle("Znajdź");
            dialog.setScene(new Scene(root));
            dialog.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package sample.controllers;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import sample.PoleTekstowe;
import java.net.URL;
import java.util.ResourceBundle;

public class MainController implements Initializable {

    @FXML
    private PoleTekstowe poleTekstowe;

    private PlikController plikController;
    private EdycjaController edycjaController;
    private ZnajdzController znajdzController;
    private FormatController formatController;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        poleTekstowe.setWrapText(true);
        plikController = new PlikController(this.poleTekstowe);
        edycjaController = new EdycjaController(this.poleTekstowe);
        znajdzController = new ZnajdzController(this.poleTekstowe);
        formatController = new FormatController(this.poleTekstowe);
    }

    //////////////////////////////////////// Plik Controller /////////////////////////////////////////////

    @FXML
    public void nowy(){
        plikController.nowy();
    }

    @FXML
    public void otworz(){
        plikController.otworz();
    }

    @FXML
    public void zapis(){
        plikController.zapis();
    }

    @FXML
    public void zakoncz(){
        plikController.zakoncz();
    }

    //////////////////////////////////////// Edycja Controller /////////////////////////////////////////////

    @FXML
    public void cofnij(){
        edycjaController.cofnij();
    }

    @FXML
    public void wytnij(){
        edycjaController.wytnij();
    }

    @FXML
    public void kopiuj(){
        edycjaController.kopiuj();
    }

    @FXML
    public void wklej(){
        edycjaController.wklej();
    }

    @FXML
    public void usun(){
        edycjaController.usun();
    }

    //////////////////////////////////////// Znajdź Controller /////////////////////////////////////////////

    @FXML
    public void znajdzWindow(){
        znajdzController.znajdzWindow();
    }

    @FXML
    public void flagaEdycjiPola(){
        poleTekstowe.setEdytowano(true);
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 18 sierpnia 2018 przez mbabane Szeryf (79,280 p.)
wybrane 22 sierpnia 2018 przez Darek554
 
Najlepsza

W ZnajdzController zdaje się, że nie ma domyślnego konstruktora, dlatego nie może załadować fxml'a. 

Ogólnie tak jak to próbujesz zrobić, to jest to, wydaje mi się, bez sensu, ponieważ tutaj:

 @Override
    public void initialize(URL location, ResourceBundle resources) {
        poleTekstowe.setWrapText(true);
        plikController = new PlikController(this.poleTekstowe);
        edycjaController = new EdycjaController(this.poleTekstowe);
        znajdzController = new ZnajdzController(this.poleTekstowe);
        formatController = new FormatController(this.poleTekstowe);
    }

Tworzysz instancje poszczególnych kontrolerów. A np. tutaj:

   @FXML
    public void znajdzWindow(){
        znajdzController.znajdzWindow();
    }

Tworzona jest kompletnie inna instancja ZnajdzController (dokładnie w metodzie znajdzWindow).

Można np. ustawiać kontroler ręcznie bez umieszczania odwołania w fxml:

FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("/sample.fxml"));
        
Controller controller = new Controller("Some arg");
fxmlLoader.setController(controller);
Parent root = fxmlLoader.load();
komentarz 19 sierpnia 2018 przez Darek554 Użytkownik (980 p.)
Dzięki za odpowiedź, ale nie czaję.

W jaki sposób tworzona jest inna instancja ZnajdzController w metodzie znajdzWindow?

Czy mówiąc domyślny konstruktor masz na myśli coś takiego?

public ZnajdzController(){

}
komentarz 19 sierpnia 2018 przez mbabane Szeryf (79,280 p.)

Czy mówiąc domyślny konstruktor masz na myśli coś takiego?

Tak, zgadza się. Domyślny konstruktor to taki, który nie posiada parametrów. 

Instancja jest tworzona, ponieważ w FXML jest zapis:

fx:controller="sample.controllers.ZnajdzController"

i w momencie kiedy robisz load:

Parent root = loader.load();

Java wczytuje fxml, i "widząc", że jest przypisany jakiś kontroler tworzy jego instancję automatycznie.

komentarz 20 sierpnia 2018 przez Darek554 Użytkownik (980 p.)
edycja 20 sierpnia 2018 przez Darek554
Rozumiem, mniej więcej o co chodzi, ale nadal nie wiem jak to napisać.
komentarz 20 sierpnia 2018 przez mbabane Szeryf (79,280 p.)

W zasadzie poprzedni post to wyjaśnia.

Parent root = fxmlLoader.load(); 

Powyższe tworzy instancje tylko wtedy gdy w fxml jest:

fx:controller="sample.controllers.ZnajdzController"
komentarz 20 sierpnia 2018 przez Darek554 Użytkownik (980 p.)
Mój błąd, już doczytałem dokładniej.

Edytowałem post ;d
komentarz 20 sierpnia 2018 przez mbabane Szeryf (79,280 p.)

Wszystko zależy w zasadzie od aplikacji.

Masz tutaj kurs JavaFX wydaje mi się, że jest on całkiem sensownie zrobiony:

https://www.youtube.com/playlist?list=PLpzwMkmxJDUwQuQR7Rezut5UE_8UGDxkU

 

Jak masz jakiś głębszy problem to najlepiej jest poszukać czegoś za pomocą google wpisując coś w stylu javafx how to make something. Programowania uczę się już kilka lat i na prawdę nie zdarzyło się abym nie znalazł odpowiedzi w necie - czy to pełnej rozwiązującej dokładnie taki sam problem, czy to w postaci jakiejś wskazówki, dzięki której popchnąłem temat dalej.

komentarz 21 sierpnia 2018 przez Darek554 Użytkownik (980 p.)

Dobra, ustawiłem kontroler ręcznie, ale błędy nadal wyskakują.

Już nie mam kompletnie pomysłu co jest źle.

 

package sample.controllers;

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import sample.PoleTekstowe;

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

public class MainController implements Initializable {

    @FXML
    private PoleTekstowe poleTekstowe;

    private PlikController plikController;
    private EdycjaController edycjaController;
    private ZnajdzController znajdzController;
    private FormatController formatController;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        poleTekstowe.setWrapText(true);
        plikController = new PlikController(this.poleTekstowe);
        edycjaController = new EdycjaController(this.poleTekstowe);
        znajdzController = new ZnajdzController(this.poleTekstowe);
        formatController = new FormatController(this.poleTekstowe);
    }

    //////////////////////////////////////// Plik Controller /////////////////////////////////////////////

    @FXML
    public void nowy(){
        plikController.nowy();
    }

    @FXML
    public void otworz(){
        plikController.otworz();
    }

    @FXML
    public void zapis(){
        plikController.zapis();
    }

    @FXML
    public void zakoncz(){
        plikController.zakoncz();
    }

    //////////////////////////////////////// Edycja Controller /////////////////////////////////////////////

    @FXML
    public void cofnij(){
        edycjaController.cofnij();
    }

    @FXML
    public void wytnij(){
        edycjaController.wytnij();
    }

    @FXML
    public void kopiuj(){
        edycjaController.kopiuj();
    }

    @FXML
    public void wklej(){
        edycjaController.wklej();
    }

    @FXML
    public void usun(){
        edycjaController.usun();
    }

    //////////////////////////////////////// Znajdź Controller /////////////////////////////////////////////

    @FXML
    public void znajdzWindow(){
        Stage dialog = new Stage();
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("C:\\Users\\Rafał\\IdeaProjects\\Notepad\\src\\sample\\fxml\\ZnajdzWindow.fxml"));
        dialog.initOwner(poleTekstowe.getScene().getWindow());
        loader.setController(this.znajdzController);

        try {
            Parent root = loader.load();

            dialog.setTitle("Znajdź");
            dialog.setScene(new Scene(root));
            dialog.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @FXML
    public void flagaEdycjiPola(){
        poleTekstowe.setEdytowano(true);
    }
}
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.Pane?>

<Pane prefHeight="150.0" prefWidth="450.0" xmlns="http://javafx.com/javafx/8.0.121">
   <children>
      <Label layoutX="32.0" layoutY="29.0" text="Znajdź:" />
      <TextField layoutX="68.0" layoutY="25.0" prefHeight="25.0" prefWidth="263.0" />
      <Button layoutX="342.0" layoutY="25.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="97.0" text="Znajdź następny" />
      <Button layoutX="343.0" layoutY="63.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="97.0" text="Anuluj" />
      <CheckBox layoutX="32.0" layoutY="89.0" mnemonicParsing="false" text="Uwzględnij wielkość liter" />
      <Label layoutX="248.0" layoutY="80.0" text="Kierunek" />
      <RadioButton layoutX="210.0" layoutY="106.0" mnemonicParsing="false" text="W górę" />
      <RadioButton layoutX="289.0" layoutY="106.0" mnemonicParsing="false" text="W dół" />
   </children>
</Pane>
"C:\Program Files\Java\jdk1.8.0_144\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.2\lib\idea_rt.jar=51138:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_144\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar;C:\Users\Rafał\IdeaProjects\Notepad\out\production\Notepad" sample.Main
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.control.MenuItem.fire(MenuItem.java:462)
	at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405)
	at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358)
	at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
	at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
	at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416)
	at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
	at com.sun.glass.ui.View.notifyMouse(View.java:937)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
	at java.lang.Thread.run(Thread.java:748)
Caused by: 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 sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
	at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
	... 43 more
Caused by: java.lang.IllegalStateException: Location is not set.
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434)
	at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
	at sample.controllers.MainController.znajdzWindow(MainController.java:94)
	... 53 more

Process finished with exit code 0

 

1
komentarz 21 sierpnia 2018 przez mbabane Szeryf (79,280 p.)

Chyba ścieżka jest źle ustawiona. Jeśli korzystasz z getResources() to program jest w folderze:

/.../src/java/resources/

Ustaw ścieżkę np. tak:

String path = "file:///C:/Users/Rafał/IdeaProjects/Notepad/src/sample/fxml/ZnajdzWindow.fxml"
URL location = new URL(path);
loader.setLocation(location);

Innym wyjściem, wydaje mi się lepszym, jest skorzystanie własnie z tego resources. Należy wtedy umiesczać pliki fxml w katalogu resources:

/.../src/java/resources/

I wtedy ścieżkę podje się za pomocą getResources(), wskazując tylko podfolder w katalogu resources:

 loader.setLocation (getClass().getResource("/fxml/ZnajdzWindow.fxml") );

W podanym wyżej tutorialu jest pokazany ten sposób więc zerknij.

komentarz 22 sierpnia 2018 przez Darek554 Użytkownik (980 p.)
Dzięki, wszystko już działa :D

Ostatnie pytania mam.

Co zwraca metoda getClass() i getResource()?

Dlaczego zapis "file:" w zmiennej path jest konieczny?
1
komentarz 22 sierpnia 2018 przez mbabane Szeryf (79,280 p.)
edycja 22 sierpnia 2018 przez mbabane
getClass zwraca reprezentacje klasy, jest to związane z mechanizmem refleksji więc jak chcesz się dowiedzieć więcej to poszukaj o tym informacji.

https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html

getResouces zwraca obiekt URL - jest to po prostu reprezentacja URL. file:/// jest ze względu na "działanie" URL (nie klasy URL w javie). W URL trzeba określić protokół np. http:// w przypadku stron internetowych. W przypadku plików lokalnych jest to file - dla testu uruchom z dysku dowolny plik tekstowy po przez przeglądarkę i sprawdź co się znajduje w pasku adresowym.

O tym jak to wszystko dokładniej działa musisz sobie sam doczytać bo ja tak do końca to nie wiem i mogę tylko wprowadzić Cię niepotrzebnie w błąd.

Podobne pytania

0 głosów
1 odpowiedź 473 wizyt
0 głosów
1 odpowiedź 140 wizyt
pytanie zadane 20 października 2018 w Java przez ILikeJava Obywatel (1,230 p.)
0 głosów
0 odpowiedzi 843 wizyt
pytanie zadane 4 lipca 2016 w Java przez kaminki Obywatel (1,030 p.)

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 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!

...