Zweifacher Try-Catch

keksdose132

Mitglied
Guten Morgen/Mittag/Abend,
ich möchte mal fragen, ob es möglich ist, dass bei einem Fehler in der Run Methode des Threads, die Exception des ersten Try-Catches aufrufen kann. So das statt "Exception1" im Log, "Exception2" ausgegeben wird.

Java:
try {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {   
                BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("https://www.google.com").openStream()));
                reader.close();

                //Wenn hier ein Fehler auftritt -> Log.d("MyLog", "Exception2");
            }
            catch (Exception ex) { Log.d("MyLog", "Exception1"); }
        }
    });
    thread.start();
    thread.join();
}
catch (Exception ex) { Log.d("MyLog", "Exception2"); }
 

VfL_Freak

Top Contributor
Moin,
wenn im inneren TRY eine Exception fliegt, dann wird sie auch dort gefangen!

Zudem fängt Du in beiden Fällen JEDE auftretende Exception (ex)! Das würde ich ggf. mal spezifisch einschränken!
So kann 'start' nur eine "IllegalThreadStateException" und 'join' nur eine "InterruptedException" auslösen!

Im inneren TRY können allerdings div. Exceptions auftreten!
Lass dir mal den gesamten Stacktrace ausgeben!

VG Klaus
 

mihe7

Top Contributor
@keksdose132 meine Glaskugel sagt mir, dass Du nicht weißt, wie Du außerhalb des Runnables an die Exception rankommen sollst, weil Du in Runnable die checked exception abfangen musst, richtig?
 
K

kneitzel

Gast
Also was ich mich frage: Wenn man den Thread direkt nach dem start joined: Dann kann man doch auf den Thread auch verzichten oder übersehe ich jetzt einen Grund, der für den Thread spricht.

Das Konzept ist etwas seltsam: Wenn ich einen separaten Thread habe, dann interessiert mich da ja in der Regel ein Ergebnis. Dieses Ergebnis kann dann vielseitig sein - angefangen von den gewünschten Daten bis halt hin zu einem "Daten konnten nicht ermittelt werden."
Das ist aber doch ein ganz generelles Prinzip. Und diesbezüglich gibt es dann auch extrem viel und oft sogar spezielle Klassen wie z.B. den SwingWorker bei Nutzung von Swing.
Aber generell sind hier viele Dinge denkbar und möglich. Aber bei den meisten Frameworks ist dies ein Thema, das relativ groß und breit dokumentiert ist. Also z.B.
Android: https://developer.android.com/guide/background (Hier gibt es dann ganz viele unterschiedliche Möglichkeiten was alles möglich ist)
Swing: https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html
JavaFX: https://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm
...

Also das Problem, das ich sehe:
Wenn Du einen separaten Thread startest, dann ist ja Dein Ziel, dass Dein Code weiter laufen kann. Das bedeutet, dass so ein try Block verlassen wird und dann der andere Thread sonst wo sein kann oder sogar schon beendet sein könnte -> Die Anforderung selbst ist relativer Unsinn in meinen Augen. Daher ist die Frage tatsächlich wichtig: Was willst Du wirklich machen? Die Wahrscheinlichkeit eines xy Problems scheint mir hier relativ hoch zu sein ...
 

mrBrown

Super-Moderator
Mitarbeiter
Also was ich mich frage: Wenn man den Thread direkt nach dem start joined: Dann kann man doch auf den Thread auch verzichten oder übersehe ich jetzt einen Grund, der für den Thread spricht.
Könnte Android sein, da sind Netzwerkzugriffe ja nicht im Main-Thread erlaubt. (Allerdings ist das dann schon die dümmste "Lösung" dafür)
 
K

kneitzel

Gast
Ja, an Android habe ich auch etwas gedacht, denn dieses Log(TAG, message...) kenne ich eigentlich nur von Android. Und bei Android würde dann der DownloadManager oder WorkManager Sinn machen. Und selbst wenn nicht: Das .join() sollte auf jeden Fall weg, denn das blockiert die App dann ja wieder was ja explizit verhindert werden sollte.

Jedem, der Android Apps entwickeln will, empfehle ich, sich genau die Dokumentation durchzulesen. Diese Abkürzungen a.la. "Ich suche immer etwas im Netz und kopiere mir so lange Code zusammen bis irgendwas habe, das aussieht als würde es funktionieren" sind hier extrem schlecht, denn eine Android App hat von sich aus eine gewisse Komplexität und die sollte man auf jeden Fall verstanden haben. ==> https://developer.android.com/guide
Besonders wichtig wäre aus meiner Sicht Activities: https://developer.android.com/guide/components/activities/intro-activities?hl=en
Danach dann je nach Bedarf:
- Security: https://developer.android.com/topic/security?hl=en
- Intents: https://developer.android.com/guide/components/intents-filters?hl=en
- Testing: https://developer.android.com/training/testing/fundamentals?hl=en
- Resources: https://developer.android.com/guide/topics/resources/providing-resources?hl=en
...

Oder in Kurzform: Ohne ein Verständnis, was bei Android wie funktioniert ist es sehr wahrscheinlich, dass einem die App massiv auf die Füße fällt. Und im Endeffekt kostet es ein vielfaches an Zeit, als wenn man sich einmal den Überblick verschafft hat. Und wenn man den Überblick hat und die Begriffe kennt, dann kann man auch viel besser nach etwas suchen (und dann auch das finden, was man sucht...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U zweifacher Aufruf animiertes gif Allgemeine Java-Themen 7
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
M IndexOutOfBoundsException / Try-Catch Allgemeine Java-Themen 9
ralfb1105 LogManager logger schreibt nicht in Catch() Zweig Allgemeine Java-Themen 2
C try-catch Block Verständnisfrage Allgemeine Java-Themen 14
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
C Unendlich Wiederholungsfehler bei try catch - Block Allgemeine Java-Themen 3
H try catch Allgemeine Java-Themen 4
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
E Immer nur der Catch-Zweig Allgemeine Java-Themen 3
N String aus Try/Catch-Block übernehen Allgemeine Java-Themen 14
B Execption auf Oberfläche werfen, try-catch-Block Allgemeine Java-Themen 6
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
R return in try-catch-Blöcken Allgemeine Java-Themen 6
I Exceptions - weder catch- noch finally-Klausel funktioniert Allgemeine Java-Themen 12
F try und catch Blöcke Allgemeine Java-Themen 3
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
P Methodenaufruf von catch Allgemeine Java-Themen 2
S native methoden in try / catch ? Allgemeine Java-Themen 3
V Was tun mit "nötigen" Catch-Blöcken? Allgemeine Java-Themen 3
V Try-Catch und Code der folgt? Allgemeine Java-Themen 3
B Try/Catch in While-Schleife mit Scanner - Hilfe! Allgemeine Java-Themen 3
E try/catch Block um ganzes Programm Allgemeine Java-Themen 10
T rießiger try - catch - Block Allgemeine Java-Themen 13
M try-catch (Wie erzwing ich die catch-Anweisung)? Allgemeine Java-Themen 13
L Try ... Catch Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben