IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: problem se spustenim vychozi JavaFX aplikace

Aktivity
Avatar
Jana Prochazkova:14.6.2016 23:06

Ahoj, chci zacit s JavaFX a vytvorim si projekt Java FX FXML Application. kdyz ho chci spustit, melo by se mi zobrazit okno s aplikaci hello world ale misto toho dostanu nasledujici chybove hlasky a nezobrazi se nic. Muzete nekdo pomoci? Diky

compile-single:
run-single:
Exception in Application start method
java.lang.reflec­t.InvocationTar­getException
at sun.reflect.Na­tiveMethodAcces­sorImpl.invoke0(Na­tive Method)
at sun.reflect.Na­tiveMethodAcces­sorImpl.invoke(Na­tiveMethodAcces­sorImpl.java:62)
at sun.reflect.De­legatingMetho­dAccessorImpl­.invoke(Delega­tingMethodAcces­sorImpl.java:43)
at java.lang.reflec­t.Method.invo­ke(Method.java:483)
at com.sun.javaf­x.application­.LauncherImpl­.launchApplica­tionWithArgs(Lau­ncherImpl.java:363)
at com.sun.javaf­x.application­.LauncherImpl­.launchApplica­tion(LauncherIm­pl.java:303)
at sun.reflect.Na­tiveMethodAcces­sorImpl.invoke0(Na­tive Method)
at sun.reflect.Na­tiveMethodAcces­sorImpl.invoke(Na­tiveMethodAcces­sorImpl.java:62)
at sun.reflect.De­legatingMetho­dAccessorImpl­.invoke(Delega­tingMethodAcces­sorImpl.java:43)
at java.lang.reflec­t.Method.invo­ke(Method.java:483)
at sun.launcher.Lau­ncherHelper$FXHel­per.main(Launcher­Helper.java:767)
Caused by: java.lang.Run­timeException: Exception in Application start method
at com.sun.javaf­x.application­.LauncherImpl­.launchApplica­tion1(Launche­rImpl.java:875)
at com.sun.javaf­x.application­.LauncherImpl­.lambda$launchAp­plication$147(Lau­ncherImpl.java:157)
at com.sun.javaf­x.application­.LauncherImpl$$Lam­bda$48/584634336­.run(Unknown Source)
at java.lang.Thre­ad.run(Thread­.java:745)
Caused by: java.lang.NullPo­interException: Location is required.
at javafx.fxml.FXMLLo­ader.loadImpl(FXMLLo­ader.java:3201)
at javafx.fxml.FXMLLo­ader.loadImpl(FXMLLo­ader.java:3169)
at javafx.fxml.FXMLLo­ader.loadImpl(FXMLLo­ader.java:3142)
at javafx.fxml.FXMLLo­ader.loadImpl(FXMLLo­ader.java:3118)
at javafx.fxml.FXMLLo­ader.loadImpl(FXMLLo­ader.java:3098)
at javafx.fxml.FXMLLo­ader.load(FXMLLo­ader.java:3091)
at javafxapplica­tion4.JavaFXAp­plication4.star­t(JavaFXAppli­cation4.java:22)
at com.sun.javaf­x.application­.LauncherImpl­.lambda$launchAp­plication1$153(Lau­ncherImpl.java:821)
at com.sun.javaf­x.application­.LauncherImpl$$Lam­bda$51/1201081024­.run(Unknown Source)
at com.sun.javaf­x.application­.PlatformImpl­.lambda$runAn­dWait$166(Plat­formImpl.java:323)
at com.sun.javaf­x.application­.PlatformImpl$$Lam­bda$45/1147985808­.run(Unknown Source)
at com.sun.javaf­x.application­.PlatformImpl­.lambda$null$164(Plat­formImpl.java:292)
at com.sun.javaf­x.application­.PlatformImpl$$Lam­bda$47/928410104­.run(Unknown Source)
at java.security­.AccessContro­ller.doPrivile­ged(Native Method)
at com.sun.javaf­x.application­.PlatformImpl­.lambda$runLa­ter$165(Platfor­mImpl.java:291)
at com.sun.javaf­x.application­.PlatformImpl$$Lam­bda$46/1267032364­.run(Unknown Source)
at com.sun.glass­.ui.InvokeLater­Dispatcher$Fu­ture.run(Invo­keLaterDispat­cher.java:95)
at com.sun.glass­.ui.win.WinAp­plication._run­Loop(Native Method)
at com.sun.glass­.ui.win.WinAp­plication.lam­bda$null$141(Wi­nApplication.ja­va:102)
at com.sun.glass­.ui.win.WinAp­plication$$Lam­bda$37/636718812­.run(Unknown Source)
... 1 more
Exception running application javafxapplica­tion4.JavaFXAp­plication4
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

 
Odpovědět
14.6.2016 23:06
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Jana Prochazkova
Tomáš Brůna:15.6.2016 6:31

ahoj,
můžeš poslat kód?
PS: používej prosím tlačítko pro vložení kódu ;)

Nahoru Odpovědět
15.6.2016 6:31
Vi veri universum vivus vici
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:15.6.2016 7:20
Caused by: java.lang.NullPointerException: Location is required.

Tato vyjímka znamená, ze se pokoušíš otevřít soubor z neexistující cesty. Jestli se pokoušíš otevřít .FXML soubor pro načtení view, tak ho zkus přesunout ke třídě, která ho otevírá. Když to nezabere, tak pokud máš standartní uspořádání složek projektu (všechno ve složce src), tak ten soubor přesuň do složky src)

Nahoru Odpovědět
15.6.2016 7:20
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:15.6.2016 18:13

diky,ale vsechny tri soubory, tzn. FXMLDocument.fxml, FXMLDocumentCon­troller.java a JavaFXApplica­tion5.java jsou ve slozce src projektu. Co se tyce zdrojaku, nic nebylo zmeneno. Je to proste tak jak to netbeans vygeneruji po zalozeni projektu.

 
Nahoru Odpovědět
15.6.2016 18:13
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:15.6.2016 18:47

I tak sem pošli kód, co NetBeans vygenerovalo. Ať víme, na čem jsme.

Nahoru Odpovědět
15.6.2016 18:47
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:15.6.2016 19:13
package javafxapplication4;

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


public class JavaFXApplication4 extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();
    }


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

}

dale .fxml

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

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafxapplication4.FXMLDocumentController">
    <children>
        <Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" />
        <Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" fx:id="label" />
    </children>
</AnchorPane>

a controller

package javafxapplication4;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;


public class FXMLDocumentController implements Initializable {

    @FXML
    private Label label;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        label.setText("Hello World!");
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {

    }

}
 
Nahoru Odpovědět
15.6.2016 19:13
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:15.6.2016 19:21

Prosím tě, můžeš sem ještě poslat screen složkoveho uspořádáni projektu? Vypadá to, že to bude problém s packagem.

Nahoru Odpovědět
15.6.2016 19:21
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:15.6.2016 19:30

jj urcite. dekuju. Staci to takhle?

 
Nahoru Odpovědět
15.6.2016 19:30
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:15.6.2016 20:19

Je to nějaký divný. Zkus vzít ten FXMLDocument.fxml a přesunout ho o složku výš, tedy přímo do složky src.

Nahoru Odpovědět
15.6.2016 20:19
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:15.6.2016 20:46

Nepomaha.

Kazdopadne pokud vytvorim v tom samem package projektu new FX Main Class a zkusim ji spustit, tak vse bezi jak ma..Normalne se mi zobrazi view programu Hello world. Takze mam ted navic NewFXMain.java. Jak ho spojim se souborem .fxml? Proste abych mohla vsechny prvky pohodlne upravovat ve scene builderu.

 
Nahoru Odpovědět
15.6.2016 20:46
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:15.6.2016 20:50

"propojuje" se to timto řádkem:

Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

Zde se načte ten fxml soubor a propojí.

Nahoru Odpovědět
15.6.2016 20:50
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:15.6.2016 21:14

Dobre zde je ten funkcni zdrojak. a jak to udelam abych mohla jednotlive graf. komponenty upravovat v scene builderu?

package javafxapplication5;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;


public class NewFXMain extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


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

}
 
Nahoru Odpovědět
15.6.2016 21:14
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:15.6.2016 21:46

Tak za 1. všechno včetně řádku s kódem:

StackPane root = new StackPane();

se smaže.
2. místo zmíněného řádku napíšeš toto:

Parent root = FXMLLoader.load(); // Jako parametr se bere cesta k FXML souboru

Jsou různé způsoby jak získat cestu k souboru. Tím nejjednodušším je už přes zmíněné:

getClass().getResource("nazevFxmlSouboruCoJeVeStejneSlozceJakoSpustenySoubor");

Pokud ani tohle nezabere, tak si zjisti, jak to zkompilovat ručně a pak uvidíš, kde je problém. Protože to vypadá, že chyba je v NetBeansech.

Nahoru Odpovědět
15.6.2016 21:46
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Jana Prochazkova:16.6.2016 21:45

asi je chyba v Netbeans...resime tady neco co by melo fungovat bez tehle vsech manipulaci...

 
Nahoru Odpovědět
16.6.2016 21:45
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:16.6.2016 21:56

Tak to zkus zkompilovat ručně. Pokud všechno bude fungovat, tak ano, je chyba v NetBeans

Nahoru Odpovědět
16.6.2016 21:56
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.