Variablen Variable einer Klasse in einer anderen Klasse Nutzen

Ci

Aktives Mitglied
Hallo Leute,

ich arbeite mit zwei Klassen. In der einen Klasse, hier : class Auslesen und darin ist meine Methode ReadEFID_func(...) nun, hier hab ich meine Variable abc ....

Java:
/*
* Hier meine Klasse Auslesen, in der ich
* in der Methode 'public static void EF_ID_func(CardChannel channel)'
* diesen String 'EF_ID_inhalt.substring(8, 14).toUpperCase()' der Variable abc zuweise
* Mein String hat den Inhalt '123456'. So, und diesen Inhalt möchte ich nun in meiner
* main ausgeben, was ja in meiner GUI Klasse ist
*/
 
public class Auslesen
 
public static String abc;
public String getAbc(){    
return abc;
}
 
public static void EF_ID_func(CardChannel channel)throws CardException {
        Gui.textArea.append("  EF_ID:");    
        if (check9000_func(APDU_resp)) {        
 
        Gui.textArea.append("- nummer:"+ inhalt.substring(8, 14).toUpperCase() +);        
 
        abc = "" +EF_ID_inhalt.substring(8, 14).toUpperCase();
 
.
.
        }
        }
}


...jetzt möchte ich in meiner anderen Klasse, hier: class Gui den Inhalt meiner Variable abc auf die Konsole ausgeben. Bei meinen bisherigen Versuchen habe ich leider immer null zurück bekommen!!! Wie kann ich das am besten lösen? hat jemand eine Idee?!

Java:
/*
* Hier meine GUI Klasse, in der main möchte ich den Inhalt der Variable abc aus
* der Klasse Auslesen ausgeben!
*/
 
public class Gui extends JFrame implements ActionListener{
 
        public static void main(String[] args) {
                System.out.println(Auslesen.abc);
        }
}

hoff ihr könnt mir dabei helfen

gruß
 
Man müsste mindestens die Methode EF_ID_func vorher aufrufen.

Man könnte aber auch den String direkt von der Methode zurückgeben lassen - oder hat es einen Sinn den String in der Variablen abc zu halten?
 
im Grunde ist es nicht wichtig, den String in die Variable abc zu packen. Ist für mich nachher nur übersichtlicher!!!

nun, wie ruf ich die Methode EF_ID_func in meiner class Gui auf?

und wie geb ich dann den String direkt von der Methode aus?

gruß
 
nun, wie ruf ich die Methode EF_ID_func in meiner class Gui auf?
Da diese static ist
Code:
Auslesen.EF_ID_func(channel)
woher auch immer die Variable channel kommen soll.
und wie geb ich dann den String direkt von der Methode aus?
Steht eigentlich in jedem Lehrbuch: Galileo Computing :: Java ist auch eine Insel – 2.8 Methoden einer Klasse
Java:
public String gibStringZurueck() {
    return "Ich werde zurückgegeben";
}

Allerdings sieht es so auch, als würdest Du Dich so langsam in eine Sackgasse manövrieren. Du solltest Dich mal ein wenig in die Grundlagen: Aufbau einer Klasse, objektorientiertes Programmieren... einlesen.
 
[Java]
public class Gui extends JFrame implements ActionListener{

public static void main(String[] args) {
Auslesen meineAuslesenInstance = new Auslesen();
System.out.println(meineAuslesenInstance.abc);
}
}
[/Java]

Eine Main in der GUI ist aber mal garnicht ratsam... evtl. MVC anschauen...

Eine GUI class die JFrame extends und ActionListener Implementiert oO sieht stark nach einem Design Fehler aus...




[Java]
public class Haupt {

public static void main(String[] args) {

Gui meineGui = new Gui();
meineGui.init();

Auslesen meinAuslesen = new Auslesen();
meinAuslesen.EF_ID_func(Channel channel); // wäre nur zu klären wo channel herkommen soll ...
String rueckgabeVomAuslesen = meinAuslesen.getAbc();
meineGui.zeigAn(rueckgabeVomAuslesen);
meineGui.update();

}

}

public class Gui {

JFrame fenster;

public Gui() {
fenster = new JFrame();
}

public void init() {
// Setzen von Initial werten, feldern , größe , usw.
// evtl schon ein .show oder .setVisible(true) hier
}

public void zeigAn (String textZumAnzeigen) {
// deinen Textfeldern Text zum anzeigen geben....
}

public void update () {
// Updaten der Fenster usw...
}

}

public class Auslesen

public String abc;

public Auslesen() {
// dein Konstrucktor
abc = "abc";
}

public String getAbc(){

return abc;

}

public static void EF_ID_func(CardChannel channel) {
}
}
[/Java]

So könnte es aussehen..
 
Zuletzt bearbeitet:
@Schulyn: Hallo,

dein Lösugsvorschlag muss ich noch ausprobieren, aber vorweg noch eine Frage:

Wieso übergibst du in der Klasse Auslesen der Variable abc den festen String "abc" zu?

Genau das möchte ich ja nicht! Denn den Wert, den ich in einer Variable zuweisen will, steckt hier drin:

Java:
abc = "" +EF_ID_inhalt.substring(8, 14).toUpperCase();

...unzwar nach dem + Zeichen! In diesem Fall weiß ich, dass der Wert "123456" ist.


ach ja, zu dem channel noch. So hab ich sie in meiner Klasse Auslesen implementiert:

Java:
import javax.smartcardio.CardChannel;

public class Auslesen{

.
.
    public static CardChannel channel;
.
.
}


gruß
 
Der Variable abc weise ich im Konstruktor den Wert "abc" zu.
Somit ist der Default wert der variable "abc".

Wenn du deine cardRead methode aufrust bekommt die variable einen neuen wert.
Ich habe das gemacht, da du sonst eine NPE bekommen kannst.

Wenn die Auslesen Class Instanziert wird, hat abc KEINEN wert (NULL). Sollte dann jemand .getAbc() aufrufen, so läuft dein Program in eine NPE. Da abc zu diesem Zeitpunkt noch keinen (null) wert hat.
 
jetzt hab ich meine "main" in eine separate Klasse gepackt. funktioniert auch alles soweit noch.
Aber sobald ich in meine Gui und Auslesen Klasse den restlichen Code implementier, bekomm ich nur noch Fehlermeldungen und verliere auch den ganzen Überblick!
Ich muss auch dazu sagen, dass ich in dem Gebiet ein Einsteiger bin 🙁

...mir kann man glaub ich nur helfen, wenn man den ganzen Code vor sich hat.
Aber dazu sind es einige Zeilen an Code zu posten! aus dem Grund überleg ich weiter, wie ich das Problem am besten anpacken kann.

Danke für die Hilfe bis hierher.

gruß
 
Du kannst die Fehlermeldungen Posten. (Mit Stacktrace).
Dann können wir dir evtl. helfen. Oder aufzeigen wo der Fehler sein könnte.
 

Zurück
Oben