Ich habe eine ConnectException, die nicht gefangen zu sein, aus irgendeinem Grund
Ich arbeite an einem Android-Anwendung, die sockets verwendet. Ich habe eine Funktion namens initializeStreams() öffnet den socket und versucht, eine Verbindung. Diese Funktion wirft eine ConnectException wenn die Verbindung konnte nicht hergestellt werden. Aber für einige Grund, in den code, der Aufrufe initializeStreams(), die einen catch-block für ConnectException, die log-Drucke aus seinen eigenen stack-trace der exception, anstatt auf den catch-block. Der catch-block wird nie erreicht, auch wenn die genaue exception wird geworfen. Hier ist der code:
Try-block:
try {
initializeStreams();
/* other code */
} catch (ConnectException e) {
Log.i(TAG, "caught connect exception");
}
initializeStreams():
public void initializeStreams() throws ConnectException {
try {
Log.i(TAG, "Attempting to connect");
requestSocket = new Socket(SERVER_ADDR, PORT);
/* other code */
} catch (IOException e) {
e.printStackTrace();
}
Kann ich nicht verstehen, so dass jede Hilfe wäre sehr geschätzt werden.
- Wir können nicht herausfinden, warum das passiert, da die einzige Buchse operation, die du gepostet hast in deinem code nicht werfen eine ConnectException. Post der rest des Codes.
- Ja. Die Log-rechts, bevor der socket-Initialisierung wird gedruckt, dann die ConnectException stack-trace ist gedruckt, anstatt das Protokoll, das im catch-block. initializeStreams() ist die einzige Funktion, die wirft ConnectException und die erste code-snippet, das ist der einzige Ort, wo es aufgerufen wird.
- was meinst du? Socket-operation ist die, die die Ausnahme ausgelöst, so steht es in der Stapel-Ablaufverfolgung, und es ist der einzige socket-operation in meinem Programm im moment.
- Ich sehe keine Methode, wirft ConnectException hier: docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html
- ConnectException extends SocketException aus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Kette Ihrer Ausnahme werfen es in die
catch
block. Versuchen Sie Folgendes:ConnectException
speziell statt mit einerinstanceof
test, undinitializeStreams()
nur werfen mussIOException
, nichtException
: letzteres ist schlechte Praxis.instanceOf
fürexceptions
ist nicht eine empfohlene Praxis. Habe ich entfernt, komplett. Aber diecatch
block sind in der richtigen Reihenfolge, und sollte funktionieren, wenn der code innerhalb dertry
tut werfen einConnectException
oderIOException
.ConnectException
erstrecktSocketException
was wiederum erstreckt sichIOException,
so dass die Haken für dieIOException
iminitializeStreams()
fängt dieConnectException.
würde ich nur entfernen, dasstry/catch
block insgesamt: es gibt nicht viel Punkt in der Rückkehr sauber von dieser Methode, ohne eine Verbindung.