Выбрасывание исключения в блоке Catch (Java)

108
28 ноября 2019, 07:40

Есть проблемка: при возникновении исключения IOException нужно его обработать и в блоке Catch выбросить моё исключение ServerRunningException, которое будет обрабатываться при вызове метода извне, при помощи throws в сигнатуре. Но IDE требует от меня принудительного обрабатывания, что меня не устраивает... Сэмплы кода:

(Метод)

public boolean connect() throws ServerRunningException {  //Перебросил вверх по иерархии
  Thread processing = new Thread(() -> {
    try {
        server = new ServerSocket(PORT);
        ExecutorService flowsPool = Executors.newFixedThreadPool(COUNT_OF_CONNECTIONS);
        Semaphore block = new Semaphore(COUNT_OF_CONNECTIONS);
        while (true) {
            block.acquire();
            Socket accept = server.accept();
            flowsPool.execute(() -> {
                try (
                    InputStream inputStream = accept.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "cp1251"));
                    DataInputStream dataInputStream = new DataInputStream(inputStream);
                ){
                    String command;
                    do {
                    command = br.readLine();
                        Validation.check(command);
                    } while(command != null);
                    accept.close();
                    System.out.println("closed ..");
                } catch (IOException ex) {
                    ex.printStackTrace();
                } catch (NullPointerException ex){
                    ex.printStackTrace();
                } finally {
                    block.release();
                }
            });
        }
    } catch (InterruptedException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        throw new ServerRunningException(ex); //unreported exception ServerRunningException; must be caught or declared to be thrown
    }
});
processing.start();
return true;
}  

(Класс собственного исключения)

public class ServerRunningException extends IOException{
  String message;
  public ServerRunningException(Throwable ex){
    message = ex.getMessage();
    initCause(ex);
  }
  @Override
  public String getMessage(){
    return message;
  }
}  

Заранее спасибо)

Answer 1

Это не IDE требует а java компилятор.

В качестве решения Вы можете наследовать Ваше исключение от java.lang.RuntimeException, наследников этого исключения не надо объявлять в сигнатурах методов, т.н. unchecked exceptions

READ ALSO
Получение Bitmap из ImageView с задержкой

Получение Bitmap из ImageView с задержкой

Есть ImageView img, в которое картинка загружается по ссылке при помощи Picasso:

113
После закрытия окна по кнопке введенные значения не сохранятся в переменных данного контроллера javafx

После закрытия окна по кнопке введенные значения не сохранятся в переменных данного контроллера javafx

После закрытия окна по кнопке введненные значения не сохранятся в переменных данного контроллераИмеется контроллер он отображает новое...

138
Пути к ресурсам

Пути к ресурсам

Есть программа, которой нужно иногда считывать данные из файловВ самой программе указываю путь:

99
for loop в Kotlin

for loop в Kotlin

Еще не успел освоить что то более сложное чем простые циклы в kotlin, поэтому не знаю как можно взять индекс в самом теле циклаДля примера на java цикл...

130