Ich bin relativ neu zu Java und habe folgendes Szenario:
Aus einer Methode myMethod1 soll gewartet werden (durch Timer). Nach einer gewissen Zeit soll Methode2 aufgerufen werden.
In beiden Methoden sollen Exceptions gefangen werden.
JavaCode siehe unten. Bekomme folgenden Kompilierfehler: myfile.java:11: unreported exception java.lang.Exception; must be caught or declared to be thrown. Also bei Zeile myMethod2();
Ich habe das Problem ungefähr verstanden: Timer erzeugt einen neuen Thread der keine Exceptions fangen kann etc.
Ich habe mir schon einiges über Exceptions, catch/try/finally/throws usw durchgelesen aber komme irgendwie nicht weiter.
Alternativ wollte ich es mit wait() lösen (im Code als Kommentar), das wait() bringt andere Probleme mit sich (observer, lock etc). Kann mir jemand helfen, wie das richtig heißen müsste? Alternativen?
Vielen Dank.
Java:
publicvoidmyMethod1()throwsException{try{......
timer =newTimer();TimerTask task =newTimerTask(){publicvoidrun(){myMethod2();}};//~ this.wait(delay);//~ myMethod2();
timer.schedule(task,0, delay);.....}catch(Exception e){System.out.println("Something...");}}publicvoidmyMethod2()throwsException{try{System.out.println("This will give an unreported exception");}catch(Exception e){System.out.println("Something...");}}
Er wirft in Methode2 keine Exception höher, sondern fängt sie auf. Auf jeden Fall scheint es mir eher so, als ob der Sinn von "throws" nicht verstanden wurde.
Laut der Beschreibung müsste man das "throws Exception" bei der zweiten Methode löschen. (Wobei es bei der 1. Methode auch keinen Sinn macht).
Java:
publicvoidmyMethod2(){try{System.out.println("This will give an unreported exception");}catch(Exception e){System.out.println("Something...");}}
Der erste Lösungsvorschlag "Im Timer musst du die Exception dann verarbeiten oder weiterwerfen" funktioniert nicht. Man bekommt Rendition.java:277: illegal start of type try
Rendition.java:277: ';' expected
Laut dem was ich gelesen habe, kann man keine Exceptions im Timer (TimerTask imlements Runnable) verarbeiten.
Zweiter Vorschlag:
Das die Exceptions nicht ganz sauber sind weiss ich. Ich will es erstmal zum kompilieren bringen :shock:
Wenn man throws Exception von Methode2 rausnimmt, hat man mehr Fehler: Rendition.java:279: unreported exception java.lang.Exception; must be caught or declared to be thrown
getRendition();
^
Rendition.java:320: unreported exception java.net.URISyntaxException; must be caught or declared to be thrown
httpcall = getRenditionURL.toURI();
^
Rendition.java:324: unreported exception java.io.IOException; must be caught or declared to be thrown
response = httpclient.execute(httpget);
^
Rendition.java:340: unreported exception java.io.IOException; must be caught or declared to be thrown
resEntityAsString = EntityUtils.toString(resEntity);
Bis jetzt funktioniert Thread.sleep(millis) gut. Ich würde trotzdem gerne wissen wie man das mit dem Timer lösen kann, falls jemand noch eine Idee hat..
Der erste Lösungsvorschlag "Im Timer musst du die Exception dann verarbeiten oder weiterwerfen" funktioniert nicht. Man bekommt Rendition.java:277: illegal start of type try
Rendition.java:277: ';' expected
Laut dem was ich gelesen habe, kann man keine Exceptions im Timer (TimerTask imlements Runnable) verarbeiten.
Das kannst du selbst erledigen (wenn du deine Anmeldung abgeschlossen hättest -> hab ich für dich gemacht), dafür gibt es einen Button linksseitig unterhalb dieses Theads.