Как заставить программу продолжить работу после исключения? - PullRequest
0 голосов
/ 16 мая 2018

Как заставить программу продолжать работать после исключения?

У меня есть этот код:

this.runnable = new Runnable() {
    public void run() {
        if (!isLoading && !playerList.isEmpty()) {
            this.isLoading = true;
            ArrayList<Player> clonedList = (ArrayList<Player>)playerList.clone();
            playerList.clear();
            for (Player player : clonedList) {
                main.getDataManager().loadPlayer(player);
            }
            this.isLoading = false;
        }
    }
}

Метод "main.getDataManager (). LoadPlayer (player);"может бросить исключение.

После исключения мой бесконечный цикл, который выполняет метод run () этого runnable каждые 5 секунд, останавливается.Как заставить его никогда не останавливаться / выходить, если будет выдано исключение?Возможно ли это?

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Здесь вам нужно обработать исключение.Если исключение не обработано, программа останавливается после точки, в которой было сгенерировано исключение.Но вы можете заключить код выброса исключения в блок try-catch следующим образом.

for (Player player : clonedList) {
try {
   main.getDataManager().loadPlayer(player);
} catch (Exception e) {
   // your recovery from exception can be done here..
}

} // после того, как эта программа все еще может выполнить, даже если было сгенерировано исключение ..

0 голосов
/ 16 мая 2018

Перехватите исключение:

public void run() {
    if (!isLoading && !playerList.isEmpty()) {
        this.isLoading = true;
        ArrayList<Player> clonedList = (ArrayList<Player>)playerList.clone();
        playerList.clear();
        for (Player player : clonedList) {
            try {
                main.getDataManager().loadPlayer(player);
            } catch (Exception e) { }
        }
        this.isLoading = false;
    }
}

В качестве альтернативы вы можете поместить весь цикл for в блок try - catch, чтобы, если один игрок не смог загрузить, он прекратил попыткизагружайте другие, пока run не будет вызван снова.

public void run() {
    if (!isLoading && !playerList.isEmpty()) {
        this.isLoading = true;
        ArrayList<Player> clonedList = (ArrayList<Player>)playerList.clone();
        playerList.clear();
        try {
            for (Player player : clonedList) {
                main.getDataManager().loadPlayer(player);
            }
        } catch (Exception e) { }
        this.isLoading = false;
    }
}
0 голосов
/ 16 мая 2018

Поймай и проглоти / обработай это:

for (Player player : clonedList) {
    try {
       main.getDataManager().loadPlayer(player);
    } catch (Exception e) {

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...