NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Radoslav Tušan:5.1.2017 17:59

Zdravim,

Presiel som si vsetky tutorialy v Jave strukturovaneho programovania az po OOP a zacinal som v NetBeans a v priebehu serialov presiel na IntelliJ a pokracoval tutorialy v nom. Vsetko fungovalo tak isto ako v NetBeans, este aj otvarat projekty v IJ z NB je celkom komplikovane ale prisiel som na to. Kazdopadne nikdy sa nezjavila chyba pri pisani kodu, kompilovani atd.. ked som skusal serialy v IJ ktore ste tu davali v NetBeans (v podstate je to len IDE)

Pred par dnami som zacal s JavaFX a prvy tutorial s kalkulackou som robil rovno v IJ. Kod vsak nesiel skompilovat, aj napriek tomu ze bol spravne. Dokonca som kod prekopiroval do NetBeans a tam skompilovat siel a po spusteni mi automaticky vybehol formular a vsetko fungovalo atd.. No v IJ (aj ked je kod identicky) skompilovat nejde. Skusal som to v Scene builder 1.1 aj 2.0. Stale to funguje len v net beans a v IJ nie. Otazka je ci tu je niekto kto pouziva IJ a stretol sa s niecim takym. Rad by som ostal pri IJ a som si isty ze to je nejaka blba chyba ktora sa da jednoducho odstranit kedze v jednom to skompilovat ide a v druhom nie. (Btw uplne prvy tutorial pre Hello FX world mi v IJ funguje! ) Spravne vytvaram aj FXML javaFX novyp rojekt v IJ. Tak mi fungoval aj hello FX. Fakt neviem kde je chyba a za kazdu radu dakujem!!! Ak mam pripojit aj fxml alebo nieco ine dajte vediet, pripajam log:

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: Location is required.
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
        at sample.Main.start(Main.java:17)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
        ... 1 more
Editováno 5.1.2017 18:01
 
Odpovědět
5.1.2017 17:59
Avatar
Odpovídá na Radoslav Tušan
Petr Štechmüller:5.1.2017 18:36

Ahoj, vyjímka jasně píše:

Caused by: java.lang.NullPo­interException: Location is required.

Problém je ve špatné cestě k FXML dokumentu. Můžeš sem hodit jednak kód, kde načítáš FXML soubor a ještě adresářovou strukturu pouze projektu? Pak můžu poradit jak to napsat tak, aby to fungovalo.

Nahoru Odpovědět
5.1.2017 18:36
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Radoslav Tušan:5.1.2017 18:49

Main

package sample;

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

/**
 *
 * @author Pc
 */
public class Main extends Application {

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

        Scene scene = new Scene(root);

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

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

Controller

package sample;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.net.URL;
import java.util.ResourceBundle;

public class FxmlFileController implements Initializable {

    @FXML
    private TextField num1textField;

    @FXML
    private TextField num2textField;

    @FXML
    private ComboBox charComboBox;

    @FXML
    private Label vysledokLabel;

    @FXML
    private  Button vypocitajButton;

    @FXML
    private void handlePocitajAxButt (ActionEvent event){

        String operacia = (String)charComboBox.getSelectionModel().getSelectedItem();

        double vysledok = 0;

            switch (operacia){
                case "+":
                    vysledok = Double.parseDouble(num1textField.getText()) + Double.parseDouble(num2textField.getText()); break;
                case "-":
                    vysledok = Double.parseDouble(num1textField.getText()) - Double.parseDouble(num2textField.getText()); break;
                case "*":
                    vysledok = Double.parseDouble(num1textField.getText()) * Double.parseDouble(num2textField.getText()); break;
                case "/":
                    vysledok = Double.parseDouble(num1textField.getText()) / Double.parseDouble(num2textField.getText()); break;
            }
        vysledokLabel.setText(String.valueOf(vysledok));
    }






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

        ObservableList<String> operacia = FXCollections.observableArrayList("+", "-", "*", "/");
        charComboBox.setItems(operacia);
        charComboBox.getSelectionModel().selectFirst();


    }

}

FXML subor

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

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

<AnchorPane id="AnchorPane" prefHeight="200.0" prefWidth="500.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="sample.FxmlFileController">
    <children>
        <TextField fx:id="num1textField" layoutX="17.0" layoutY="28.0" prefWidth="140.0" />
        <TextField fx:id="num2textField" layoutX="221.0" layoutY="28.0" prefWidth="140.0" />
        <ComboBox fx:id="charComboBox" layoutX="157.0" layoutY="28.0" minWidth="40.0" prefHeight="21.0" prefWidth="64.0">
            <items>
                <FXCollections fx:factory="observableArrayList">
                    <String fx:value="Item 1" />
                    <String fx:value="Item 2" />
                    <String fx:value="Item 3" />
                </FXCollections>
            </items>
        </ComboBox>
        <Label fx:id="equaltsTo" layoutX="361.0" layoutY="28.0" text="=" />
        <Label fx:id="vysledokLabel" layoutX="370.0" layoutY="31.0" text="0" />
        <Button fx:id="vypocitajButton" layoutX="17.0" layoutY="111.0" mnemonicParsing="false" onAction="#handleButtonAction" prefWidth="140.0" text="počítaj" />
    </children>
</AnchorPane>

takto presne to mam v Netbeans a tam to skompilovat ide, v IntelliJ to nejde. Classy a fxml mam tak isto v jednom priecinku. Dakujem vopred.

 
Nahoru Odpovědět
5.1.2017 18:49
Avatar
Odpovídá na Petr Štechmüller
Radoslav Tušan:5.1.2017 19:12

Ahoj, diky za odpoved, pastol som kod do druheho komentara.

 
Nahoru Odpovědět
5.1.2017 19:12
Avatar
Odpovídá na Radoslav Tušan
Petr Štechmüller:5.1.2017 19:18

Tak jsem našel hned několik chyb.

1. Zkus

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

nahradit tímto:

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

Pokud ani to nepomůže, tak zkontroluj, že se ti kopíruje soubor FxmlFileContro­ller.fxml do složky out/production/na­zev_projektu/sam­ple prostě tam, kde jsou zkompilované *.class soubory.
2. V kontroleru maš includovaný balíček

import java.awt.*;
import java.awt.event.ActionEvent;

JavaFX má vlastní Action event a vlastní kontrolky. Proto prosím tě tyto dva řádky smaž a postupně naincluduj správné kontrolky.
3. V souboru FxmlFileContro­ller.fxml máš definovaný handler

onAction="#handleButtonAction"

ale v kontroleru ho nemáš definovaný. Bude to další problém.
Nejdřív ale vyřeš správné načtení toho souboru.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
5.1.2017 19:18
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Radoslav Tušan:5.1.2017 19:35

2. bod som opravil, intelliJ samo importlo awt miesto javafx.scene....

1. bod som skusil pred prepisanim awt na javafx.scene.. aj po prepisani a nepomohlo

Pise mi tento log pri kompilovani: (btw stale je divne to, ze ten isty kod, s tou istou cestou (ale s prepisanym awt na javafx) mi v NetBeans funguje ale v IJ nie).

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: Location is required.
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
        at sample.Main.start(Main.java:17)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
        ... 1 more
 
Nahoru Odpovědět
5.1.2017 19:35
Avatar
Odpovídá na Petr Štechmüller
Radoslav Tušan:5.1.2017 19:49

Okej takze, spravil som to ze som siel priamo do zlozky s projektom (intellij) a pozeram, ze tam chybaju adresare ako build a dist, ktore som mal v projekte s tym istym kodom ale v Netbeans. Skopiroval som tie priecinky do IJ projektu a hľa skompilovat uz ide a funguje to ako v NB. Asi sa bdem musiet podrobnejsie pozriet na vytvaranie javaFX projetkov v IJ pretoze taka vec sa mi nestala pri vytvarani konzolovych appiek.

Kazdopadne dakujem za odpoved a cas, urcite si mi pomohol s tym awt.

Rado.

 
Nahoru Odpovědět
5.1.2017 19:49
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 7 zpráv z 7.