kleines OOP - Problem

D

Duckemai

Fortgeschrittenes Mitglied
6
Hallo zusammen,

ich kämpfe mal wieder mit einem OOP - Problem. Eigentlich simpel, es klappt aber trotzdem nicht.

Ich habe in meiner Hauptklasse ein Objekt. (Genau genommen ist es für die Sprachausgabe ein Objekt:
public TextToSpeech myTts;

Wenn die Sprachausgabe läuft, dann möchte ich sie bei einem Anruf mittels BroadcastReceiver (in einer anderen Klasse) stoppen:
if (hauptklasse.myTts != null) {
hauptklasse.myTts.stop();
}

Aber wie greife ich nun auf dieses Objekt zu?

Habe 2 Versuche gestartet:
1. Hauptklasse hauptklasse= new Hauptklasse ();
und
2. Hauptklasse hauptklasse;

Im ersten Fall erkennt er gar nicht, dass das Objekt befüllt ist, obwohl die Sprachausgabe läuft.
Im 2ten Fall stürzt das Programm mit einer NullPointerException ab.

Weiß jemand, wie ich es richtig machen muss?

Vielen Dank!
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Duckemai
Habe 2 Versuche gestartet:
1. Hauptklasse hauptklasse= new Hauptklasse ();
und
2. Hauptklasse hauptklasse;

leider kann das so überhaupt nicht gehen.

bei variante 1) erstellst du ein neues objekt. das heißt es ist ganz neu, wie das NEW schon sagt. also hast du ne neue instanz die nichts von der aktuellen sprachausgabe weiß.

bei variante erstellst du nur die member variable, ohne irgendwas. der member zeigt im speicher genau nirgends hin => NullpointerException

Du musst jetzt dein TTS objekt irgendwie global verfügbar machen. Das könntest du zB mit einer Singleton Klasse erreichen.

im Receiver kannst du dann über dieses Singleton auf das TTS objekt zugreifen.
 
  • Danke
Reaktionen: Duckemai
Singleton!!??

Habe ich ja noch nie was von gehört. Aber eine globale Variable würde mir natürlich helfen. Wenn ich ein brauchbares Bsp für Android gefunden habe gebe ich noch mal Feedback.

Danke!
 
ich würde dir empfehlen dich mit den grundlagen auseinander zu setzen und zu verstehen, was du da tust.
 
@Swordi: Ach weißt Du, ich habe schon zig Bücher zum Thema OOP gelesen. Dann denke ich, jetzt hast Du es gerafft und ich komme gut mit OOP voran. Und plötzlich klappt es nicht, wo ich hätte schwören können, so muss es aber sein. Die Alternative wäre nun, mit dem Programmieren aufzuhören. Dafür macht es mir aber zu viel Spass. :rolleyes:

Tschuldigung, wenn ich hier ab und an mal ziemlich unqualifizierte Fragen stelle. Programmiere halt so alleine vor mich hin. Wahrscheinlich fehlt mir mal zu diesem Thema ein fachlicher Austausch.

Danke aber. Hast mir ja schon ein paar mal aus der Patsche geholfen.
 
hmm wenn du mit dem begriff singleton nichts anfangen kannst, dann schau dich mal nach besseren büchern um :D
 
  • Danke
Reaktionen: the_alien
swordi schrieb:
hmm wenn du mit dem begriff singleton nichts anfangen kannst, dann schau dich mal nach besseren büchern um :D

Hm. Muss jetzt gestehen trotz Informatikstudium und über einer Dekade Berufserfahrung ist mir der Begriff Singleton bisher auch noch nicht begegnet. Hoffe mir wird jetzt mein Diplom nicht wieder aberkannt... :crying:

@Duckemai: Das ist einfach der Unterschied zwischen Klasse und Instanz einer Klasse. Die Klasse ist die Plätzchenform, die Instanz das Plätzchen das Du mit dieser Form stanzt.

Du kannst Variablen auf Klassenebene definieren mit dem keyword "static". Dann kannst Du per Klasse.Variable auf diese Variable zugreifen. Die Variable hängt dann allerdings sozusagen an der Plätzchenform. Egal wieviele Plätzchen Du stanzt, static Variablen gibt es nur einmal. Wenn Du dann sagst Klasse.Variable ist somit eindeutig klar welche Variable Du meinst.

Ohne das Wort static existiert eine Variable innerhalb der Klasseninstanz, also sozusagen innerhalb des Plätzchens. Und da es davon beliebig viele geben kann, musst Du um auf die Variable Zugreifen zu können erst mal auf die Klasseninstanz, das Plätzchen Zugriff haben.

Das kannst Du z.B. so lösen:

Code:
Class MyClass  {
  Variable myVariable;
  NochneKlasse x;
 
  x = New NochneKlasse();
  x.myClass = this; //Damit übergibst Du einen Link auf die aktuelle Instanz Deiner Klasse MyClass an die x Instanz der Klasse NochneKlasse
}
 
Class NochneKlasse {
   MyClass myClass;
 
  //Jetzt kannst Du auf die Variable myVariable zugreifen per myClass.myVariable
}
 

Ähnliche Themen

W
  • WuDiDong
Antworten
3
Aufrufe
764
jogimuc
J
S
Antworten
4
Aufrufe
988
Sempervivum
S
M
  • maksimilian
Antworten
2
Aufrufe
666
maksimilian
M
Zurück
Oben Unten