Zugriff auf Variable aus anderer Klasse

Apon

Mitglied
Hallo!
Wie kann ich den Wert eine Variable, die innerhalb eines ActionListeners (public void actionPerformed) deklariert ist in einer anderen Klasse wieder aufrufen und verwenden?
- Hoffe, dass man die Frage verstehen und man mir helfen kann.
Danke schon mal im Voraus.
 
Guten Morgen,

da gibts verschiedene Möglichkeiten .. Also zwei Möglichkeiten wären bspw:
Ich nenn die beiden Klassen mal im Folgenden Klasse1 und Klasse2, ok ? :) ..

Möglichkeit 1:

Klasse1 erhält eine Klassenvariable, welche in der actionPerformed() Methode geändert wird und Klasse2 greift dann über eine getVariable() Methode auf die Variable zu ..

So ungefähr:
Code:
public class Klasse1 implements ActionListener
{
    private int eineVariable = 0;
    ....
    public int getVariable(){

         return this.eineVariable;
    }
    ....
    public void actionPerformed(ActionEvent e){
     
         this.eineVariable = 1; 
 
    }
}

Möglichkeit 2:

Einfach in der actionPerformed() Methode eine entsprechende Set Methode in der Klasse2 aufrufen. Bsp.:

Code:
public class Klasse1 implements ActionListener
{
    private Klasse2 andereKlasse;
    ....

    public void actionPerformed(ActionEvent e){
         
         int eineVariable = 1;
         andereKlasse.setVariable(eineVariable);
 
    }
}

public class Klasse2 
    
    int eineVariable;

   public void setVariable(int inVariable){
         
         this.eineVariable = inVariable;
 
    }
}


So ich hoffe das war einigermaßen verständlich .. Der Code muss natürlic noch um entsprechende Konstruktoren etc. erweitert werden .. Viell. gibts noch bessere Möglichkeiten. Das waren die zwei die mir jetzt spontan einfielen ..

Gruß Stefan
 
Hallo Stefan,
danke erstmal für deine Antwort.

Beim lesen deines Codes dachte ich: "Ja, das ist es!".
Doch nun habe ich das Problem mit der NullPointerException und innerhalb der ActionPerformed kann ich das Problem ja nicht lösen, oder doch. Die Fehlermeldung hat doch was mit (NumberFormatException) zu tun, oder nicht. Bin leider blutiger Anfänger in Sachen Java. Kann daher sein, dass dir diese Probleme "trival" vorkommen mögen - wie mein Mathe - Prof. sagen würde. :)

Gruß Jens
 
Hallo!
Hier ist der Code.

Hier die Klasse, in der die Variable daklariert werden soll...

Code:
public class Klasse1
	extends Applet {
 
double b;
public Klasse2 Test;
 
...
 
public double Variable() {
 
	try {
	 b = Double.parseDouble(textField1.getText());
	 System.err.println("b aus Variable = " + b); // b = 44.0
	}
	catch (NumberFormatException e) {
	 b = 0;
	}
	return b;
}
 
public void button1actionPerformed(ActionEvent e) {
 
	b = Variable();
	System.err.println("b aus Variable = " + b); // b = 44.0
	Test.setVariable(b); // <---Hier kommt die NullPoitnerException
 
	Klasse2 frame = new Klasse2();
	...
}
}

Und hier noch die Klasse, in der die Variable ausgegeben werden soll...
Code:
 public class Klasse2
	extends Frame {
double c;
public void setVariable(double inVariable) {
	 this.c = inVariable;
	 System.err.println(c);
}
public Klasse2() {
}
public void paint(Graphics g) {
	g.setColor(Color.blue);
	g.drawLine(50, 60, 50 + (int) c, 60);
	g.drawString("" + (int) c, 50, 50);
}
public void main(String[] args) {
}
}

Hoffe das reicht, um zu erkennen wo der Fehler liegt.
 
N'abend,
ganz einfacher Fehler:
Klasse 2 ist zwar in Ordnung, aber in Klasse 1 ist die Referenz auf Klasse 2 etwas unglücklich. Du fungierst erst in der Klassendeklaration mit public Klasse2 Test; aber in der actionPerformed steht dann plötzlich:

Code:
Test.setVariable(b);
Klasse2 frame = new Klasse2();

Die erste Zeile davon fliegt Dir um die Ohren, weil Test noch NULL ist. Du hast es nirgends erzeugt. Ein Objekt der Klasse 2 legst Du erst in der zweiten Zeile an, verwendest es dann aber nicht mehr. :)
Also entweder instanzierst Du die Variable Test vorher und kannst dann die frame-Variable weg lassen, oder Du lässt den Code mit Test weg und arbeitest mit frame.

1. sähe ungefähr so aus:
public Klasse2 Test = new Klasse2();
// dies und das
//in der actionPerformed dann:
Test.setVariable(b);
Test.show(); // oder Test.setVisible(true); -- musst halt schauen
// Klasse2 frame = new Klasse2(); <-- das kann dann weg

2. sähe so aus:
// public Klasse2 Test; <-- nicht mehr nötig
//in der actionPerformed dann:
// Test.setVariable(b); <-- nicht mehr nötig
Klasse2 frame = new Klasse2();
frame.setVariable(b);
frame.show(); // oder frame.setVisible(true), s.o.

Im übrigen: Nur Klassennamen und Konstanten sollten mit einem Großbuchstaben beginnen - wobei Konstanten dann durchgehend in Großbuchstaben zu schreiben sind.
 
Hallo!

Hab' wohl doch noch was vergessen. Ich glaube folgender Code wird zur Fehlersuche auch noch benötigt.
Denn die NullPoiterException verweißt hier noch auf die Zeile 08.

Code:
01 class Satz_button1_actionAdapter
02	implements java.awt.event.ActionListener {
03 Klasse1 adaptee;
04 Satz_button1_actionAdapter(Klasse1 adaptee) throws IOException {
05	this.adaptee = adaptee;
06 }
07 public void actionPerformed(ActionEvent e) {
08	adaptee.button1actionPerformed(e);
09 }
10 }

Des weiteren werden folgende Verweise noch aufgelistet:
Code:
 java.lang.NullPointerException
at wertübergabe.Klasse1.button1actionPerformed(Klasse1.java:89)
at wertübergabe.Satz_button1_actionAdapter.actionPerformed(Klasse1.java:8)
at java.awt.Button.processActionEvent(Button.java:382)
at java.awt.Button.processEvent(Button.java:350)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

Bedanke mich schon mal im Voraus für eure Hilfe.

Gruß Jens
 
Hat sich grad überschnitten. Bin noch dabei es auszuprobieren. Danke schon mal.
Scheinen tüpische Anfängerfehler zu sein, oder? Na ja, bin ja nicht umsonst 'n Grünschnabel.

Gruß Jens
 

Neue Beiträge

Zurück