# Wie kann ich ein String aus einer anderer Klasse in JOptionPane ausgeben?



## hudson28 (1. September 2019)

Ich muss das bekannte Hasen und Hühner programmieren und eigentlich wäre ich schon fertig, aber ich kann den String, in dem steht, wie viele Hasen und Hühner es sind, nicht ausgeben. Ich muss es in einem JOptionPane ausgeben, doch der String ist in einer anderen Klasse.


Hier ist mein String in der Klasse "Tierzaehler"


und hier ist meine JOptionPane in der Klasse TierzaehlerGUI und ich habe schon vieles ausprobeirt, aber irgendwie wird mir "ausgabe" immer rot unterstrichen. Hier sieht man meinen letzten Versuch.

Meine Frage ist also, wie kann ich "ausgabe" in dieser JOptionPane ausgeben?

(und ja ich weiss, dort steht noch Warnung anstatt Information)


----------



## zerix (1. September 2019)

Hallo,

ich vermute mal, dass die Klasse _Tierzaehler_ die Variablen _anzHuehner_ und _anzHasen_ beinhaltet und die oben abgebildete _toString_-Methode beinhaltet.

Versuch es mal einfach mit dem Aufruf _Tierzaehler.toString()._

Die Variable _ausgabe_ existiert bei dir nur in der Methode _toString_ und kannst du nicht außerhalb benutzten, da du sie in der _toString_-Methode anlegst.

Als Tipp, wenn du Code posten möchtest, musst du keinen Screenshot machen, sondern kannst den einfach hier einfügen. Dazu gibt es oben in der Toolbar einen Menü "Einfügen" und dort kannst du Code auswählen. Dann wird der Code auch mit Syntax-Highlighting im Post angezeigt und Personen, die dir helfen wollen, können ihn kopieren ohne ihn abtippen zu müssen.


Viele Grüße
Sascha


----------



## hudson28 (1. September 2019)

Ja, mit Ihren Vermutungen lagen Sie richtig. Wenn ich jedoch Tierzaehler.toString() einfüge, wird leider die ganze JOptionPane unterstrichen, wenn ich es dann richtig verstanden habe.

Und vielen Dank  Diese Webseite ist für mich allgemein ein bisschen unübersichtlich, daher freue ich mich um solche Tipps.


```
JOptionPane.showMessageDialog(null, Tierzaehler.toString() , "Warnung!", JOptionPane.WARNING_MESSAGE)
```


----------



## zerix (1. September 2019)

Da ich den ganzen Code nicht sehe, kann ich nicht sagen, was das Problem ist.

Was sagt denn die IDE dazu? Wenn etwas rot unterstrichen wird, wird ja auch eine Fehlermeldung angezeigt.

Viele Grüße
Sascha


----------



## hudson28 (1. September 2019)

Bei der IDE steht "non-static method toString() cannot be referenced from a static context". 
Falls es Ihnen weiterhilft sind hier (denke ich zumindest) die wichtigsten Programmteile zu sehen:
Im Starter:

```
public static void main(String[] args) {
        final TierzaehlerGUI gui = new TierzaehlerGUI();
        gui.zaehleTiere();
    }
```

In der Klasse TierzaehlerGUI:


```
public class TierzaehlerGUI {

    public void zaehleTiere(){
// eigentlich gäbe es hier noch zwei JOptionPane, welche die Anzahl Beine und Tiere erfragen

        JOptionPane.showMessageDialog(null, Tierzaehler.toString() , "Warnung!", JOptionPane.WARNING_MESSAGE);
 
    }

}
```

Und noch zuletzt in der Klasse Tierzaehler:

```
@Override
    public String toString(){
        String ausgabe;
        ausgabe = "Anzahl Huehner: " + anzHuehner + "\nAnzahl Hasen: " + anzHasen;
        return ausgabe;
    }
```


----------



## zerix (1. September 2019)

Ach, das ist ja richtig. Die toString-Methode muss auf ein Object der Klasse aufgerufen werden. 

Existiert irgendwo was in die Richtung:
`Tierzaehler tierzaehler = new Tierzaehler`

Viele Grüße
Sascha


----------



## hudson28 (1. September 2019)

Nein, gibt es nicht und wenn ich es hinschreibe, kommt auch eine Fehlermeldung, da es einen Konstruktor mit dem Namen Tierzaehler  gibt. Es wird "constructor Tierzaehler  in class Tierzaehler  cannot be applied to given types..."
Hier sind die Klassendiagramme falls dies helfen würde.


----------



## zerix (1. September 2019)

Hallo,

deine TierzaehlerGUI müsste teilweise so aussehen


```
public class TierzaehlerGUI{

public void zaehleTiere(){

    int anzahlBeide = <wo auch immer die her kommt>;
    int anzahlTiere = <wo auch immer die her kommt>;
    Tierzaehler zaehler = new Tierzaehler(anzahlBeine, anzahlTiere);

   JOptionPane.showMessageDialog(null, Tierzaehler, "Meldung", JOptionPane.INFORMATION_MESSAGE);
}


}
```

Natürlich musst du dem Konstruktor die Werte übergeben. Ich denke, dass Sie sich nochmal mit Klassen, Konstruktoren und Object-Erzeugnung auseinandersetzen sollten.

Viele Grüße
Sascha


----------

