Diskuze: problem se spustenim vychozi JavaFX aplikace
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 15 zpráv z 15.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
ahoj,
můžeš poslat kód?
PS: používej prosím tlačítko pro vložení kódu
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)
diky,ale vsechny tri soubory, tzn. FXMLDocument.fxml, FXMLDocumentController.java a JavaFXApplication5.java jsou ve slozce src projektu. Co se tyce zdrojaku, nic nebylo zmeneno. Je to proste tak jak to netbeans vygeneruji po zalozeni projektu.
I tak sem pošli kód, co NetBeans vygenerovalo. Ať víme, na čem jsme.
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) {
}
}
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.
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.
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.
"propojuje" se to timto řádkem:
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Zde se načte ten fxml soubor a propojí.
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);
}
}
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.
asi je chyba v Netbeans...resime tady neco co by melo fungovat bez tehle vsech manipulaci...
Tak to zkus zkompilovat ručně. Pokud všechno bude fungovat, tak ano, je chyba v NetBeans
Zobrazeno 15 zpráv z 15.