Diskuze: java.lang.NullPointerException

Java Java java.lang.NullPointerException

Avatar
Tomáš Brůna
Redaktor
Avatar
Tomáš Brůna:

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
Lepší být šprt než blbec :)
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:

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
Redaktor
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:

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
Lepší být šprt než blbec :)
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:

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
Redaktor
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:

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
Lepší být šprt než blbec :)
Avatar
Petr Štechmüller:

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
Redaktor
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:

tohleto :)

if (ImageHeight.getText() != null && Integer.parseInt(ImageHeight.getText()) != 0)
Nahoru Odpovědět 8.12.2015 20:49
Lepší být šprt než blbec :)
Avatar
Petr Štechmüller:

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
Redaktor
Avatar
Tomáš Brůna:

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
Lepší být šprt než blbec :)
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:

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
Redaktor
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:

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
Lepší být šprt než blbec :)
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:

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

Nahoru Odpovědět  +1 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:

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
Redaktor
Avatar
Odpovídá na Petr Štechmüller
Tomáš Brůna:

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

Nahoru Odpovědět 8.12.2015 21:45
Lepší být šprt než blbec :)
Avatar
Odpovídá na Tomáš Brůna
Petr Štechmüller:

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:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 8.12.2015 21:58
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Brůna
Redaktor
Avatar
Nahoru Odpovědět 8.12.2015 22:36
Lepší být šprt než blbec :)
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.