NullPointerException
qp
- java
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!
Hi!
Ich bekomme einen NullPointer
Wie genau lautet die Meldung?
off:PP
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ß
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
In der Methode "void init()" habe ich "Graphics g = p.getGraphics();" benutzt.
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
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..
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
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()
{
...}
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
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
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
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ß
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
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
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
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