# JFileChooser öffnet sich drei mal



## PattXterminator (27. Jan 2010)

Hallo,
ich hab da ein Problem.

Ich bin grad dabei einen Musik Player zu schreiben, dabei tritt aber ein Problem auf. Hier erstmal der Code:

[JAVA=290]
public void menuItemOeffnen_ActionPerformed(ActionEvent evt)
  {
    fileChooserOeffnen.setFileSelectionMode(JFileChooser.FILES_ONLY);
    int returnVal = fileChooserOeffnen.showOpenDialog(MediaPlayer.this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
      try
      {
        stop();
      }
      catch(Exception e)
      {

      }
      try
      {
        player = new Player(fileChooserOeffnenOpenFilename());
        player.laden(tracknummer);
        player.volume((double)sliderVolume.getValue()/100);
      }
      catch(Exception e)
      {

      }
    }
  }
[/code]

So. Ich klicke auf das Menü Item "Öffnen", daraufhin öffnet sich auch ganz korrekt der FileChooser. Wenn ich jetzt aber eine richtige Datei auswähle und öffnen klicke, öffnet sich der FleChooser nochmal und nichts passiert. Erst beim dritten mal "OK" lädt er dann die Datei, danach funktioniert auch so weit alles korrekt. Nur warum nimmt er das beim ersten mal nicht an? Ich hab auch herausgefunden, dass wenn ich beim ersten mal "Abbrechen" drücke, er das Fenster ganz normal schließt. Wenn ich aber zuerst "OK", dann beim zweiten mal Abbrechen" drücke, geht das Fenster trotzdem das dritte mal wieder auf.

Ich hoffe, ihr könnt mir helfen. Danke für eure Hilfe.

MfG,
PattXterminator


----------



## SlaterB (27. Jan 2010)

das erste mal hängt sicher mit Zeile 293 zusammen

und was steht dann in Zeile 305:
> player = new Player(fileChooserOeffnenOpenFilename());

was das bedeutet kann mangels Code niemand wissen, für mich klingt das im Zusammenhang mit 'es öffnen sich noch mehr FileChooser' extremst verdächtig 

poste diese Methode oder gleich ein vollständiges Programm von main-Methode an, sonst kann man ja nur rumraten,
aber bitte nicht mit 300 Zeilen insgesamt

------

edit:
> catch(Exception e)
>      {
> 
>      }

ist generell sehr schlecht, 
es ist verständlich, wenn du IOException usw nicht lesen willst, aber auf diesem Weg siehst du nichtmal wenn irgendwo eine einfache NullPointerException stattfindet


----------



## PattXterminator (27. Jan 2010)

Hmm okay, ich versuch mal das nötigste an Code zu posten.

Über die Code-Zeile

```
player = new Player(fileChooserOeffnenOpenFilename());
```
Wird die Datei, die aus dem FileChooser gewählt wurde, ganz einfach dem Musik Player übergeben, der die Datei dann ganz simpel abspielt. Meiner Meinung nach hat das ganze dann wenig mit dem erneuten Öffnen zu tun. Der Player sieht so aus:

```
public Player(String clip)
    throws UnsupportedAudioFileException, IOException, LineUnavailableException
    {
        try {
            File audioFile = new File(clip);
            soundStream = AudioSystem.getAudioInputStream(audioFile);
            AudioFormat streamFormat = soundStream.getFormat();
            DataLine.Info clipInfo = new DataLine.Info(Clip.class, streamFormat);
            soundClip = (Clip) AudioSystem.getLine(clipInfo);
            soundClip.open(soundStream);
        }
        catch (UnsupportedAudioFileException e) { }
        catch (IOException e) { }
        catch (LineUnavailableException e) { }
    }
```

Das wird dann mittels der start() Methode nur noch gestartet, weiter ist das nichts.

Der Code-Auszug aus meinem ersten Post stammt aus meiner GUI, wo durch das "Öffnen" MenuItem einfach nur der neue Player mit der Datei erzeugt wird.

Hier ist noch mal die Methode, die mir den Dateipfad als String wiedergiebt, vielleicht hat es ja damit etwas auf sich:

```
public String fileChooserOeffnenOpenFilename() {
    fileChooserOeffnen.setDialogTitle("Öffne Datei");
    if (fileChooserOeffnen.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
      return fileChooserOeffnen.getSelectedFile().getPath();
    } else {
      return null;
    }
  }
```


MfG,
PattXterminator


----------



## eRaaaa (27. Jan 2010)

In Zeile 3 in fileChooserOeffnenOpenFilename() öffnest du doch nochmal den Dialog:

```
if (fileChooserOeffnen.showOpenDialog(this)
```

Wieso schreibst du nicht schon in der action direkt:

```
player = new Player(fileChooserOeffnen.getSelectedFile().getPath());
```

?


----------



## PattXterminator (27. Jan 2010)

Ah, danke eRaaaa, dein Tipp hat geholfen, das Fenster geht jetzt nur noch einmal auf.

Danke für die schnelle Hilfe!

MfG
PattXterminator


----------

