Как я могу обработать определенные пользователем исключения и после обработки возобновить поток программы - PullRequest
1 голос
/ 10 апреля 2010
/**
 * An exception thrown when an illegal side pit was
 * specified (i.e. not in the range 1-6) for a move
 */
public class IllegalSidePitNumException extends RuntimeException
{
    /**
     *  Exception constructor.
     *  @param sidePitNum the illegal side pit that was selected.
     */
    public IllegalSidePitNumException(int sidePitNum)
    {
        super("No such side pit number: "+sidePitNum);
    }
}

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

Ответы [ 4 ]

3 голосов
/ 10 апреля 2010

Вам нужно использовать try / catch. Вы можете многое узнать об обработке исключений из Sun * (Oracle) руководства по обработке исключений . В этом уроке вы увидите разделы о вылове и обработке, посвященные конкретному адресу вашего вопроса.

Например, в коде, который вызывает метод, который может вызвать это исключение:

try {
    ...call method here...
} catch (IllegalSidePitNumException e) {
    // Display message (per your comment to BalusC)
    System.err.println(e.getMessage());
    e.printStackTrace(System.err);

    // You can also handle the exception other ways (but do not ignore it)
    // Such as correcting some offending values, setting up for a retry
    // logging the information, throwing a different exception
}

...program continues executing here...
2 голосов
/ 10 апреля 2010

Просто лови.

try {
    doStuffWhichPossiblyThrowsThisException();
} catch (IllegalSidePitNumException e) {
    // Don't rethrow it. I would however log it.
}
continueWithOtherStuff();
1 голос
/ 10 апреля 2010

Как уже говорили другие, вы можете сделать следующее:

try {
    doSomething();
} catch (SomeException ex) {
    doRecovery();
} 
doSomethingElse();

Но в Java нет способа сделать что-то вроде следующего:

doSomething();
throw new SomeException(...);
doSomethingElse();  // ... after some handler has "resumed" the exception.

Выше приведен (гипотетический) пример обработки исключений в «модели возобновления», и Java не поддерживает это. (Ни C #, ни C ++, ни какой-либо другой популярный в настоящее время язык программирования ... хотя пара исторических языков поддержала его .) На самом деле, компилятор Java выдаст вам ошибку компиляции для вышеперечисленного: что заявления после throw недоступны.

1 голос
/ 10 апреля 2010

Sidenote: Если это «ожидаемое» исключение, вы можете унаследовать его от Exception вместо RuntimeException. RuntimeExceptions предназначены для использования в случае непредвиденных ситуаций, например, неправильного ввода из-за ошибки программиста.

Конечно, вы не указываете контекст, в котором вы собираетесь использовать исключение, так что это все теория (но вы упоминаете, что хотите продолжить выполнение).

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