Try catch (Exception exp) kann nur einmal durchlaufen werden

  • 12 Antworten
  • Letztes Antwortdatum
kukuk

kukuk

App-Anbieter (kostenlos)
37
Hallo zusammen,

ich habe mal wieder ein Problem, bei dem ich nicht weiter komme.

Ich hab eine Prozedur previous_song(View v), die über einen Button onclick
ausgeführt wird.

Habe dort die Try Catch Fehlerroutine eingebaut.
try
{
code......
}
catch (Exception exp)
{
//Toast Meldung
}

Wenn in der Prozedur beim ersten durchlaufen ein Fehler auftritt, funktioniert das ganze.
Beim 2. mal durchlaufen wird die anwendung wieder beendet.
Hab ich da noch irgendwas vergessen reinzusetzen?
Oder kann eine Fehlerroutine in java nur ein einziges mal durchlaufen werden?



Vielen Dank schonmal im vorraus.
Mit freundlichen Grüßen
 
welcher fehler tritt auf beim 2. durchlauf ?? wird nichts mit dem try catch zu tun haben.
 
Setz bitte mal etwas mehr Code rein und bitte auch die genaue Fehlermeldung aus Logcat.

Der ursprüngliche Beitrag von 14:11 Uhr wurde um 14:13 Uhr ergänzt:

Außerdem ist es auch unüblich, dass man eine eine allgemeine Exception fängt. Wenn du weißt, dass in deinem Codestück eine bestimme Exception z.b. IOException auftreten kann, solltest du auch nur diese abfangen.
 
Also das bedeutet das das Try Catch immer wieder neu durchlaufen werden kann auch wenn jedesmal Fehler auftreten???

Dann muss ich nochmal schauen wieso es dort beim 2. durchlauf immer wieder abschmiert.




Vielen Dank
 
Theoretisch kannst du öfters durch ein try catch laufen. Wie du aber siehst, ist es praktisch dann meistens doch anders ;-)
Setz dich bitte mal deinen Code rein, dann schau ich mal drüber. Ich wette, dass du nach dem try catch irgendwo in einen Fehler läufst.
 
Hier ist mein Code.
Ich hatte den Timer canceln auch schon in try catch gesetzt, um zu schauen ob es vielleicht daran liegt, aber ohne Erfolg
Code:
public void timer_canceln()
{
try
{
     myTimer.cancel();
}
catch (Exception exp)
{
}
}

public void previous_song(View v){
timer_canceln();

    TextView textview = (TextView)findViewById(R.id.textView1);
    
    
    if (Global.lied_nummer < 1){
            
        
        Global.lied_nummer = Global.lied_anzahl - 1;
        
    }else{
            
        Global.lied_nummer -= 1;
        
    }
    
        mplayer.stop();
        
    
        try
        {
            mplayer = MediaPlayer.create(this, Uri.parse(Global.inhalte[Global.lied_nummer]));

            createTimer(1000, 1000);
            mplayer.start();
            Global.aktuelles_lied = Global.inhalte[Global.lied_nummer];
            textview.setText("Liedname: " + Global.alle_datei_namen[Global.lied_nummer]);
        }
        catch (Exception exp)
        {
            Toast.makeText(Player.this, "Lied konnte nicht gefunden werden!", Toast.LENGTH_LONG).show();
        
            
        }
        
        
}
 
Ich brauche schon etwas mehr Code. Irgendwas wird mit deinem Timer nicht stimmen!

Der ursprüngliche Beitrag von 14:50 Uhr wurde um 14:55 Uhr ergänzt:

Aber mal was anderes:
Warum guckst du nicht einfach mal in Logcat nach, wie der genauer Fehler ist? Wenn du nicht weißt wie das geht sag einfach bescheid.
 
Ich bekomm leider keine Musik dateien auf den Emulator........


Und deswegen keine ich die Logcat nicht nutzen.
Kommt immer
[2013-11-15 14:47:23 - ddms] transfer error: Read-only file system
[2013-11-15 14:47:23] Failed to push selection: Read-only file system

Der ursprüngliche Beitrag von 14:58 Uhr wurde um 15:02 Uhr ergänzt:

So sieht der Timer aus, der zu jedem Lied gestartet wird
Code:
public void createTimer(int start, int refresh){
    
    
    SeekBar bar;
    bar = (SeekBar)findViewById(R.id.SeekBar01);
    bar.setMax(mplayer.getDuration());
    myTimer = new Timer();
          
    myTimer.schedule(new TimerTask() {
        
        @Override
        public void run() {
            SeekBar bar;
            bar = (SeekBar)findViewById(R.id.SeekBar01);
            bar.setProgress(mplayer.getCurrentPosition());
            
            if (!mplayer.isPlaying()){
                mplayer.stop();
            
                
                mHandler2.obtainMessage().sendToTarget();
            
                 return;
              }
              
            bar = (SeekBar)findViewById(R.id.SeekBar01);
            
            bar.setProgress(mplayer.getCurrentPosition());
        
         
      
        }
    }, start,refresh); 
}
 
Sobald ich den Schreibschutz entferne, dann erneut auf Eigenschaften des Ordners klicke ist der Schreibschutz wieder drin.
 
Debugging auf deinem Smatphone!? Das sollte doch aber gehen.
 
Ich glaub es liegt daran das du einen.gecancelten Timer canceln wilsst
 
Warum testest du nicht auf einem echten gerät?
Da kannste genauso ins LogCat gucken.

Und noch ein Hinweis.

Eine Global Klasse ist ganz ganz mieser Stil, das macht man nicht.
Dazu noch leere Catch Blöcke, wenn dein fehler beim canceln das timers auftritt merkst du das nicht mal.
Evtl ist da dein Problem.
 
Zurück
Oben Unten