qp: NullPointerException

Hallo!
Ich habe ein Problem: Mein Programm besteht aus einem Applet und einem GUIPanel.

Ich bekomme einen NullPointer bei ~~~javascript      public void zeichneY(Graphics g)
     {
         int vgl=50+yPunkt();
    g.fillRect(326,50,3,300);
    g.drawLine(221,50,206,65);
    g.drawLine(221,50,236,65);
}

  
Woran kann es liegen?  
  
Gruß und Danke!
  1. Hi!

    Ich bekomme einen NullPointer

    Wie genau lautet die Meldung?

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. Hi!

      »» Ich bekomme einen NullPointer

      Wie genau lautet die Meldung?

      off:PP

      "NullPointerException:
      null"

      Und dabei ist die Zeile "g.FillRect(326,50,3,300);" gelb hinterlegt.

      Gruß

      1. Hello,

        Und dabei ist die Zeile "g.FillRect(326,50,3,300);" gelb hinterlegt.

        okay, das legt also nah, dass du zeichneX mit null als Parameter aufgerufen hast - da es sich wohl nicht um die Standard paint-Methode handelt also die Frage: woher nimmst du das Graphics-Objekt, mit dem du die Methode aufrufst?

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
        1. In der Methode "void init()" habe ich "Graphics g = p.getGraphics();" benutzt.

          1. Hello,

            In der Methode "void init()" habe ich "Graphics g = p.getGraphics();" benutzt.

            herrje, lass dir doch bitte nicht alles aus der Nase ziehen. Wenn init void ist, dann muss dein p also irgendwo herkommen - was ist denn nun schon wieder dein p?
            Ggf. schaust du dich parallel nochmal in einem der zahlreichen Tutorials um...

            MfG
            Rouven

            --
            -------------------
            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
            There's no such thing as a free lunch  --  Milton Friedman
            1. sorry jungs, ich kenne mich nicht soo gut aus, mit java.

              ich habe ein guipanel p, das "graphics g" innehat.
              ich möchte im applet die funktion "zeichneY" aufrufen, die einen linie im guipanel zeichnet.

              ich hoffe, das hilft euch weiter..

              1. Hi!

                sorry jungs, ich kenne mich nicht soo gut aus, mit java.

                Das macht ja nichts.

                ich habe ein guipanel p, das "graphics g" innehat.
                ich möchte im applet die funktion "zeichneY" aufrufen, die einen linie im guipanel zeichnet.

                ich hoffe, das hilft euch weiter..

                Warum weigerst Du Dich etwas mehr von Deinem Quellcode zu zeigen?
                Wir können diesen doch nicht erraten.
                Und offensichtlich liegt der Fehler im Quellcode.

                off:PP

                --
                "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                1. import java.awt.*;
                  import java.applet.*;
                  import java.awt.event.*;

                  public class Facharbeit extends Applet implements ActionListener
                  {
                      GUIPanel p;
                      Graphics g;
                      int[][] wertetabelle;
                      int yPunkt;

                  public void init()
                      {
                          setLayout(null);
                          setSize(600,440);
                          p=new GUIPanel();
                          add(p);
                          p.setzeActionListener(this);
                          Graphics g = p.getGraphics();
                          wertetabelle = new int[6][2];
                  }

                  ...
                  public void zeichneY(Graphics g)
                       {
                           int vgl=50+yPunkt();
                      g.fillRect(326,50,3,300);
                  }
                  ...
                  public void test()
                  {
                  init();
                  zeichneY(g);
                  }
                  ...
                  public void actionPerformed(ActionEvent e)
                   {
                      Button b = (Button)e.getSource();
                      if (b==p.b1)
                      {
                          g.fillRect(0,0,250,250);
                          test();

                  }
                  }
                  ...
                  class GUIPanel extends Panel
                  {
                  Button b1,b2;
                  Graphics g;

                  public GUIPanel()
                      {
                  ...}

                  1. Hello,

                    nach jahrelanger Appletabstinzenz versuche ich das mal zu lesen...

                    p=new GUIPanel();

                    hier haben wir ein jungfräuliches, aber noch ziemlich vereinsamtes Panel.

                    Graphics g = p.getGraphics();

                    ...das vor allem noch über keinelei eigenen Graphics-Kontext verfügt, weil es noch nicht gezeichnet wurde.

                    Wie du - auf die Schnelle - dem von mir bereits verlinkten Tutorial entnehmen kannst, ist der sicherste Weg zum Graphics-Objekt über die paint-Methode - gem. Applet-Lifecycle halte ich die init-Methode für etwas früh um auf alle Kontexte zuzugreifen - merk dir einfach das "g" deiner eigenen paint-Methode...

                    MfG
                    Rouven

                    --
                    -------------------
                    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                    I will never understand why Germans feel the need to kill trees  --  Arbeitskollege aus UK zum Thema ob eine Dokumentation elektronisch oder auf Papier ausgeliefert wird
                    1. Sry, aber das mit der Paint-Methode verstehe ich nicht wirklich. Muss ich nun im Applet auch eine Paint-Funktion schreiben, die die Funktionen enthält, die ich brauche? (fillRect, drawLine, clearRect)? Heißt die dann trotzdem auch "Graphics g" oder heißt sie dann "Graphics f", oder anders?
                      Danke

                      1. Hello,

                        Muss ich nun im Applet auch eine Paint-Funktion schreiben, die die Funktionen enthält, die ich brauche?

                        schreiben ist der falsche Name dafür, überschreiben trifft es eher. Du bist eine Unterklasse von Applet, damit automatisch von Component, damit "hast" du bereits eine paint-Methode. Du nutzt sie nur nicht. Überschreibe in deiner Klasse einfach die Methode und schon wird DEINE Methode anstelle der Standardmethode aufgerufen.

                        Heißt die dann trotzdem auch "Graphics g" oder heißt sie dann "Graphics f", oder anders?

                        das ist vollkommen egal - Namen sind Schall und Rauch. Hauptsache die Argumente der Methode sind die selben. Welche Entwicklungsumgebung verwendet du? Je nach Editor wird dir eine überschriebene Methode entsprechend gekennzeichnet...

                        Du musst dich übrigens NICHT um draw oder sonstige Methoden kümmern, die sind ja durchaus vorhanden, du musst nur sehen, dass du das Graphicsobjekt in die Finger bekommst. Tröste dich, mit dieser "Inversion of Control" - ich warte mal bis mich jemand aufruft - habe ich anfangs auch gekämpft...

                        MfG
                        Rouven

                        --
                        -------------------
                        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                        Ist Dir langweilig? Willst du Spaß? Willst Du Party? Ganz einfach!!! Schicke eine SMS mit dem Bestellwort "Feuer" an die 112 und innerhalb von 5 Minuten stehen 20 Männer mit lustigen Partyhüten, Sirenen und Partywagen vor deinem Haus!  --  Herkunft unbekannt
                        1. Ich benutze BlueJ.
                          Habe jetzt im Applet paint(Graphics g) angepasst:

                          public void paint(Graphics g)
                               {
                                   super.paint(g);
                              int vgl=50+yPunkt();
                              g.fillRect(vgl,50,3,300);
                              g.drawLine(221,50,206,65);
                              g.drawLine(221,50,236,65);

                          for (int i=0; i<xSpanne;i++)
                                          {
                                              g.drawLine((50+(i*xFaktor)),221,(50+(i*xFaktor)),215);
                                          }
                          }

                          bei "g.fillRect(...)" bekomme ich "cannot find symbol - method fillrect(int,int,int,int)".

                          Gruß

                          1. Hello,

                            bei "g.fillRect(...)" bekomme ich "cannot find symbol - method fillrect(int,int,int,int)".

                            nicht böse gemeint, aber bitte beschäftige dich noch etwas intensiver mit den Grundlagen von Java, zieh gelegentlich ein Manual zu rate - Java ist case-sensitive, die Methode heißt fillRect

                            MfG
                            Rouven

                            --
                            -------------------
                            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                            Don't lick your wounds: celebrate them. The scars you bear are the signs of a competitor.  --  character Richard Webber on Grey's Anatomy: 'Where the wild things are'
                            1. Hello,

                              bei "g.fillRect(...)" bekomme ich "cannot find symbol - method fillrect(int,int,int,int)".

                              wo ich mir die Meldung nochmal auf der Zunge zergehen lasse - ist dein Quelltext kopiert oder abgeschrieben hier im Posting? Mir fällt da eine Diskrepanz in der Groß/Kleinschreibung des Methodennamens auf. Hast du ggf. in einer der .java-Dateien eine andere Graphics-Klasse importiert? Das wäre auch nichts neues, dass dir da mehrere zur Auswahl stehen...

                              MfG
                              Rouven

                              --
                              -------------------
                              sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                              Inter Arma Enim Silent Leges  --  Cicero
              2. Hello,

                ich habe ein guipanel p, das "graphics g" innehat.

                na ja, genau DAS funktionierend "g" brauchst du, entweder per getter, oder von wo auch immer das guipanel das her hat. Redest du eigentlich bei deinem GUIPanel von einer Subklasse von JPanel, also damit JComponent??

                MfG
                Rouven

                --
                -------------------
                sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                Because good guys need a break every once in a while.  --  Morty in "Click" (Columbia Pictures, 2006)
          2. Hi!

            In der Methode "void init()" habe ich "Graphics g = p.getGraphics();" benutzt.

            Magst Du bitte etwas mehr verraten, oder schreibst Du den Code für die Nasa und dieser ist streng geheim? Im letzten Fall kann man Dir hier nicht helfen.

            off:PP

            --
            "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)