Я работаю над приложением для Android, которое использует сокеты. У меня есть функция, называемая initializeStreams(), которая открывает сокет и пытается установить соединение. Эта функция генерирует исключение ConnectException, если соединение невозможно установить. Но по какой-то причине в коде, вызывающем initializeStreams(), который имеет блок catch для ConnectException, журнал печатает свою собственную трассировку стека для исключения вместо перехода в блок catch. Блок catch никогда не достигается вообще, хотя точное исключение бросается. Вот код:У меня есть исключение ConnectException, которое почему-то не поймано
Пробный блок:
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();
}
Я не могу понять это, так что любая помощь будет оценена.
Мы не можем понять, почему это происходит, поскольку единственная операция сокета, которую вы опубликовали в своем коде, не вызывает исключение ConnectException. Оставьте остальную часть кода. – Th0rndike
Yea. Log перед началом инициализации сокета печатается, тогда трассировка стека ConnectException печатается, а не Log, который находится в блоке catch. initializeStreams() - единственная функция, которая вызывает ConnectException, и первый фрагмент кода - это единственное место, где он вызывается. – aakbari1024
Что вы имеете в виду? Эта операция сокета является той, которая генерирует исключение, она говорит это в трассировке стека, и это единственная операция сокета в моей программе на данный момент. – aakbari1024