Während event einen anderen event ausführen??

matt89

Mitglied
Hi also ich hab eine musikdatei die ich mit einen javaprogramm abspielen pausieren stoppen usw. möchte
hab eine gui oberfläche mit den jeweiligen Oberflächen erstellt. Das abspielen funktioniert auch wunderbar bloß ich kann jetzt gar nix mehr anklicken also gar keinen botton. muss ich da irgend eine code schreiben das ich während eines event andere event starten kann???

hier meine action performed methode
Java:
    public void actionPerformed(ActionEvent e) {
        boolean Play = false,Stop=false,Pause=false,Next=false;//Wahrheitswerte was momentan ausgeführt wird
        
        if(playlist.isEmpty()==false){
        if(e.getActionCommand().equals("AC_PLAY")){
             Play=true;
             Stop=false;
             AudioFile af = playlist.getCurrentAudioFile();    //aktueller Song bzw. Audiodatei
             try {
                af.play();//lässt den Song abspielen
            } catch (NotPlayableException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            System.out.println("Playing:"+af.toString());
            System.out.println("Filname is: "+af.getFilename());
            System.out.println("current: "+playlist.getCurrent());}
        
        if(e.getActionCommand().equals("AC_PAUSE")){
            AudioFile af = playlist.getCurrentAudioFile();
            if(Play==true){
                af.togglePause();//unterbricht das Lied
                Pause=true;
            }
            if(Pause==true){
                Play=true;
                try {
                    af.play();
                } catch (NotPlayableException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                Pause=false;
                
            }
           System.out.println("Pausing:"+af.toString());
           System.out.println("Filname is: "+af.getFilename());
           System.out.println("current: "+playlist.getCurrent());}
        
        if(e.getActionCommand().equals("AC_STOP")){
             AudioFile af = playlist.getCurrentAudioFile();
             af.stop();
           playTime1.setText(playTime);
           System.out.println("Stoping:"+af.toString());
           System.out.println("Filname is: "+af.getFilename());
           System.out.println("current: "+playlist.getCurrent());}
        
        if(e.getActionCommand().equals("AC_NEXT")){
            playlist.changeCurrent();
            AudioFile af = playlist.getCurrentAudioFile();
            songDescription.setText(af.toString());
            setTitle(currentsong+af.toString());
            //playTime1.setText(af.getFormattedDuration());//später durch getFormattedPosition ersetzten
           System.out.println("Switching to NEXT AudioFile:"+af.toString());
           System.out.println("Filname is: "+af.getFilename());
           System.out.println("current: "+playlist.getCurrent());}
        }
    }
 
^^
Zeig mal was in der Methode play von AudioFile steht, vielleicht ist das mit ein paar Handgriffen erledigt.

Noch ein paar Tips:

Variablennamen immer klein beginnen, damit kannst du sie auf einfachen Weg von Klassennamen unterscheiden (die immer groß).

Code:
if(playlist.isEmpty()==false){
if(e.getActionCommand().equals("AC_PLAY")){
...
System.out.println("current: "+playlist.getCurrent());}
Du solltest mehr auf Tabulatoren und die schließenden Klammern achten, damit heben sich die Codesteile voneinander ab.

Code:
if(e.getActionCommand().equals("AC_PLAY")){
}
if(e.getActionCommand().equals("AC_PAUSE")){
Mit einen else if wäre es deutlich, dass nur 1 der Bedingungen zutreffen kann.

Es kann nur 1 Status (play, stop, pause) gleichzeitig zutreffen. Deshalb wäre es vielleicht geschickter, auch nur 1 Variable dazu zu verwenden:
byte playState.

Die Stati kannst du als Konstanten (immer durchgehend groß schreiben) angeben:

private static final byte PLAY_STATE = -128;
private static final byte BREAK_STATE = PLAY_STATE + 1;
private static final byte STOP_STATE = BREAK_STATE +1;

Dadurch, dass immer der vorherige Status angegeben wird, erleichtert es spätere Änderungen.

Ich weiß nicht ob es vorteilhaft ist für mehrere Elemente einen ActionListener zu verwenden, mir persönlich gefällt es nicht. Du solltest vielleicht darüber nachdenken, ob es nicht geschickter wäre mehrere ActionListener zu verwenden. Die Variablen wie die Stati, die PlayList usw. könntest du in eine Klasse wie z. B. Recorder oder JukeBox oder was auch immer schreiben und nur darauf zugreifen.

Java:
//später durch getFormattedPosition ersetzten
Wenn du Eclipse verwendest, kannst du das durch einen Tag wie TODO, XXX oder noch einen markieren. Damit wird dir die Zeile markiert und ich glaube mich zu errinnern, dass es sogar einen View gibt um die Dinger zu verwalten. Vielleicht können das andere IDEs auch, musst du mal schauen.
 

Zurück
Oben