NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: java.lang.NullPointerException

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Tomáš Brůna
Tvůrce
Avatar
Tomáš Brůna:8.12.2015 20:31

Ahoj,
zkouším dělat program na focení obrazovky a zasekl jsem se u ořezávání obrázků, pořád mi to hází výjimku

java.lang.NullPointerException

a chybný je tento kód

try {
       if (MySize.isSelected()) // zjistí zda chci použít vlastní velikost
       {
        if (ImageHeight.getText() != null && Integer.parseInt(ImageHeight.getText()) != 0)
        {
          if (ImageWidth.getText() != null && Integer.parseInt(ImageWidth.getText()) != 0)
          {
           this.Height = Integer.parseInt(ImageHeight.getText());
           this.Width = Integer.parseInt(ImageWidth.getText());
          }
        }
        else
        {
         this.Height = 30;
         this.Width = 30;
        }
       }

snažil jsem se přes podmínky zjistit zda něco je v textBoxech ale nedaří se mi tam nikde najít chybu.
Nevíte co by mohlo být chybně?
Předem díky moc ;)

Odpovědět
8.12.2015 20:31
Vi veri universum vivus vici
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:8.12.2015 20:34

Ahoj, asi by bylo lepší sem poslat celý kód té vyjímky, Ten nám řekne víc...

Nahoru Odpovědět
8.12.2015 20:34
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:8.12.2015 20:36

promiň, mám poslat můj kód nebo celý kód co jí vyvolává?

Nahoru Odpovědět
8.12.2015 20:36
Vi veri universum vivus vici
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:8.12.2015 20:38

Pošli obsah vyjímky. Když se ta vyjímka stane, tak se do konzole vypíše hromada textu. Tak tu hromadu textu nám sem překopíruj...

Nahoru Odpovědět
8.12.2015 20:38
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:8.12.2015 20:41

tohle?

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1762)
        at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1645)
        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.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.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.Node.fireEvent(Node.java:8216)
        at javafx.scene.control.Button.fire(Button.java:185)
        at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
        at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
        at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
        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.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:3724)
        at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3452)
        at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1728)
        at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2461)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:348)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:273)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:382)
        at com.sun.glass.ui.View.handleMouseEvent(View.java:553)
        at com.sun.glass.ui.View.notifyMouse(View.java:925)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)
        at com.sun.glass.ui.win.WinApplication$$Lambda$38/29531133.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:745)
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:483)
        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:483)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
        at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1757)
        ... 47 more
Caused by: java.lang.NullPointerException
        at screeny02.FXMLDocumentController.handleButtonAction(FXMLDocumentController.java:59)
        ... 57 more
Editováno 8.12.2015 20:41
Nahoru Odpovědět
8.12.2015 20:41
Vi veri universum vivus vici
Avatar
Petr Štechmüller:8.12.2015 20:43

Jo přesně tohle. Zde se píše, kde je chyba.

at screeny02.FXMLDocumentController.handleButtonAction(FXMLDocumentController.java:59)

Co máš na řádku 59 ve FXMLDocumentCon­troller?

Nahoru Odpovědět
8.12.2015 20:43
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:8.12.2015 20:49

tohleto :)

if (ImageHeight.getText() != null && Integer.parseInt(ImageHeight.getText()) != 0)
Nahoru Odpovědět
8.12.2015 20:49
Vi veri universum vivus vici
Avatar
Petr Štechmüller:8.12.2015 20:51

Tak to vypadá, že ImageHeight není inicializovaný. Je to null. Proto ten NullPointerEx­ception. Tak nám asi ukaž více kódu, ať zjistímě, proč to nemáš inicializovaný...

Nahoru Odpovědět
8.12.2015 20:51
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Brůna
Tvůrce
Avatar
Tomáš Brůna:8.12.2015 21:15

FXMLDocumentCon­troller

public class FXMLDocumentController implements Initializable {


    @FXML
    private TextField DefaultPathField; // cesta ke složce s obrázky
    @FXML
    private CheckBox NewPhoto; // kontroluje zda má při vyfocení vytvořít nový obrázek
    @FXML
    private CheckBox MySize;
    @FXML
    private TextField ImageHeight;
    @FXML
    private TextField ImageWidth;

    private int index;
    private int Height;
    private int Width;

    @FXML
    private void handleButtonAction(ActionEvent event) throws AWTException, IOException { // tlačítko pro screenshot
        Camera cam = new Camera(index);

        if (NewPhoto.isSelected())
        { index++; }

        if (MySize.isSelected())
        {
         if (ImageHeight.getText() != null && Integer.parseInt(ImageHeight.getText()) != 0)
         {
           if (ImageWidth.getText() != null && Integer.parseInt(ImageWidth.getText()) != 0)
           {
            this.Height = Integer.parseInt(ImageHeight.getText());
            this.Width = Integer.parseInt(ImageWidth.getText());
           }
         }
         else
         {
          this.Height = 30;
          this.Width = 30;
         }


        cam.TakePhoto(DefaultPathField.getText(), NewPhoto.isSelected(), MySize.isSelected(), this.Height, this.Width);

    }}

    @Override
    public void initialize(URL url, ResourceBundle rb) {
         index = 0;

        // cyklus kontroluje, kolik obrázků je již vytvořeno, potřeba dodělat aby projel jenom tolik obrátků, kolik je ve složce
        for (int i = 0; i < 80; i++)
        {
         File screenshot = new File(System.getenv("APPDATA") + File.separator + "\\Screenovac\\" +"screenshot" + String.valueOf(i) + ".png");
         if (screenshot.exists() == true)
         {
          index++;
         }
        }

        generujcestu(); // vygeneruje složku v AppData a zapíše její cestu do souboru cesta.txt

        try {
            nactiCestu("C:\\Users\\asus\\Documents\\NetBeansProjects\\Screeny02\\src\\screeny02\\cesta.txt"); // načte cestu ze souboru cesta.txt
        } catch (FileNotFoundException ex) {}


    }

fxml soubor

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

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

<AnchorPane id="AnchorPane" prefHeight="165.0" prefWidth="332.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="screeny02.FXMLDocumentController">
    <children>
        <Button fx:id="button" layoutX="143.0" layoutY="126.0" onAction="#handleButtonAction" text="Vyfoť" />
      <TextField fx:id="DefaultPathField" layoutX="111.0" layoutY="6.0" prefHeight="25.0" prefWidth="195.0" />
      <Label layoutX="14.0" layoutY="10.0" text="Složka s obrázky" />
      <CheckBox fx:id="NewPhoto" layoutX="14.0" layoutY="46.0" mnemonicParsing="false" text="Vytvářet nové obrázky" />
      <CheckBox fx:id="MySize" layoutX="14.0" layoutY="74.0" mnemonicParsing="false" text="Vlastní velikost screenshotu" />
      <TextField fx:id="ImageWidth" layoutX="254.0" layoutY="91.0" prefHeight="25.0" prefWidth="64.0" />
      <Text layoutX="223.0" layoutY="108.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Šířka" />
      <Text layoutX="100.0" layoutY="108.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Výška" />
      <TextField fx:id="ImageHeight" layoutX="143.0" layoutY="91.0" prefHeight="25.0" prefWidth="71.0" />
    </children>
   <effect>
      <InnerShadow blurType="ONE_PASS_BOX" />
   </effect>
</AnchorPane>
Nahoru Odpovědět
8.12.2015 21:15
Vi veri universum vivus vici
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:8.12.2015 21:32

Tak jsem si zkopiroval tvůj kód z kontroleru a první, co na mě IDE křičí je, že nemůžeš instancovat třídu Camera.

Editováno 8.12.2015 21:32
Nahoru Odpovědět
8.12.2015 21:32
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:8.12.2015 21:36

kód z kamery ja tady :)

public class Camera {
    private int index;
    private Rectangle rect;

    public Camera(int index)
    {
     this.index = index;
    }

    public void TakePhoto(String path, Boolean checkedNew, Boolean checkedSize, int height, int width)
    {
      try {
           if (checkedNew == false) // pokud se při vyfocení nemají vytvářet nové obrázky
           {
               if (checkedSize)
               {
                this.rect = new Rectangle();

                 rect.height = 30;
                 rect.width = 30;
               }
               else
               {
                this.rect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
               }
                BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
                ImageIO.write(image, "png", new File(path + "/screenshot.png"));
                System.out.println("ok");
           }
           else
           {
            index++;


                BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
                ImageIO.write(image, "png", new File(path + "/screenshot" + String.valueOf(this.index) + ".png"));
                System.out.println("ok");
              }
          }
      catch(Exception e){System.out.println("chyba: " + e);};
    }



}
Nahoru Odpovědět
8.12.2015 21:36
Vi veri universum vivus vici
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:8.12.2015 21:36

OK, mě to došlo hned, co jsem odeslal příspěvek, že ta kamera asi bude Tvoje...

Nahoru Odpovědět
8.12.2015 21:36
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:8.12.2015 21:41

Asi už jsem na to přišel. Ty jsi vyplnil použe políčko šířka, ale políčko výška bylo prázdné. Máš docela nešikovně napsanou podmínku, kde zjišťuješ, zda-li je políčko vyplněný.

Nahoru Odpovědět
8.12.2015 21:41
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:8.12.2015 21:45

aha, a jak by měla být podmínka napsaná?

Nahoru Odpovědět
8.12.2015 21:45
Vi veri universum vivus vici
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:8.12.2015 21:57

Já bych ji napsal obráceně. Zjišťoval bych, jestli políčko není vyplněno, tak nic nedělej.
Takže asi nějak takhle:

if (ImageHeight.getText() == null || Integer.parseInt(ImageHeight.getText()) == 0) {
        return;
}
if (ImageWidth.getText() == null || Integer.parseInt(ImageWidth.getText()) == 0) {
        return;
}

Tím si zajistím, že na řádcích za těmito podmínkami budu mít v těch políčkách nějakou hodnotu...

Editováno 8.12.2015 21:57
Nahoru Odpovědět
8.12.2015 21:57
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:8.12.2015 21:58

A místo kontroly na null bych spíš kontroloval, jestli text je empty

ImageWidth.getText().isEmpty()
Editováno 8.12.2015 21:58
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
8.12.2015 21:58
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:8.12.2015 22:36

Super! :) díky moc

Nahoru Odpovědět
8.12.2015 22:36
Vi veri universum vivus vici
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 17 zpráv z 17.