Diskuze: problem se spustenim vychozi JavaFX aplikace

Java Java problem se spustenim vychozi JavaFX aplikace

Avatar
Jana Prochazkova:

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. června 23:06
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na Jana Prochazkova
Tomáš Brůna:

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

Nahoru Odpovědět 15. června 6:31
Lepší být šprt než blbec :)
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:
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  +1 15. června 7:20
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:

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. června 18:13
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:

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

Nahoru Odpovědět 15. června 18:47
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:
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. června 19:13
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:

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  +1 15. června 19:21
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:

jj urcite. dekuju. Staci to takhle?

 
Nahoru Odpovědět 15. června 19:30
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:

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. června 20:19
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:

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. června 20:46
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:

"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. června 20:50
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Jana Prochazkova:

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. června 21:14
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:

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. června 21:46
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Jana Prochazkova:

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

 
Nahoru Odpovědět 16. června 21:45
Avatar
Odpovídá na Jana Prochazkova
Petr Štechmüller:

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

Nahoru Odpovědět 16. června 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.