Нарушение потока программы, если обнаружена ошибка? - PullRequest
0 голосов
/ 17 ноября 2010

Хорошо, у меня есть метод, который запускает объект, который связан с данными - своего рода фабрика.

Фабрика разделяет данные и отправляет данные, которые разделяются, на пользовательские объекты, которые дополнительно обрабатывают / уточняют данные,

Моя проблема в том, что я регистрирую ошибки с помощью объекта, который в основном просто добавляет строки вместе в журнал ошибок.Некоторые ошибки в порядке - это означает, что поток программы может продолжаться - однако некоторые из них серьезные , и поэтому процесс должен быть остановлен, и мне нужно вернуть журнал ошибок в исходный метод.И прекратите обработку данных в этот момент, иначе это может испортить ситуацию.

Исходный метод возвращает строку, которую вы видите.Мне не нужно беспокоиться о том, как метод возвращает ошибку, просто нужно ее исправить.

alt text

Спасибо

Ответы [ 6 ]

1 голос
/ 17 ноября 2010

Похоже, что вы должны вызывать исключение, когда вы столкнулись с серьезной ошибкой и у вас есть вызов фабрики в операторе try catch для обработки ошибок, которые он может сгенерировать.

Посмотрите здесь http://download.oracle.com/javase/tutorial/essential/exceptions/throwing.html для получения дополнительной информации.

Основной код будет

Exception e = new Exception();
throw e;

Однако вы можете посмотреть на создание собственного класса исключений, чтобы он содержал больше информации о конкретной вызванной ошибке.

Редактировать: Вы упоминаете, что для возврата в журнал ошибок добавлено пользовательское исключение.

Двойное редактирование: Что-то вроде

public class BadFactoryException extends Exception{
    private String log;
    public BadFactoryException(String log){
        this.log = log
    }
}

С фабричным методом, который может выдать что-то вроде

public returntype factory throws BadFactoryException(input){
    try{
    //code goes here
    }catch(Exception e){
         throw new BadFactoryExeption(log);
    }       

}
0 голосов
/ 18 ноября 2010

Хорошо, это то, что я хотел ... наконец-то понял.

4 класса, включая пользовательское исключение.

package ExceptionTest;

public class Main {

    public static void main(String[] args) {
        exceptionTester();
    }

    private static void exceptionTester(){
        try{         
            new FirstLevelObj().begin();        
        }
        catch(MyException e){
            System.out.println("Its worked!");
            e.printStackTrace();
        }
        finally{
            System.out.println("Oh young man..This Class doth created the other classes! \nAnd has now thrown the exception!");
        }

    }

}

package ExceptionTest;

public class FirstLevelObj {

    private SecondLevelObj second;

    public FirstLevelObj() throws MyException{
    }

    protected void begin()throws MyException{
        try{
            second = new SecondLevelObj();
            second.start();
        }
        catch(MyException e){
            throw new MyException("This Is The One!");
        }
        finally{
            System.out.println("And finally..");
        }
    }

}

package ExceptionTest;

public class SecondLevelObj {

    public SecondLevelObj(){

    }

    protected void start() throws MyException{
        for(int i = 0; i<10; i ++){
            if(i == 6){
                System.out.println("Exception should be thrown:");
                throw new MyException("An Error Hath Occurred Young Man!");
            }
            else{
                System.out.println(i);
            }
        }
    }
}

package ExceptionTest;

public class MyException extends Exception{
    public MyException(String s){
        super(s);
    }
}
0 голосов
/ 17 ноября 2010

Я не Java-человек, но я думаю, что вам нужно использовать блок try {...} catch (error) {...}. Когда обнаружена нужная ошибка, запустите System.exit(). Вот пример:

try {
  /* Do your stuff here */
} catch (ExceptionType name) {
  /* Oh noes, a fatal error! */
  print('Oh noes!');
  System.exit()
}

Это то, что вы искали?

0 голосов
/ 17 ноября 2010

Базовое руководство по исключениям: http://download.oracle.com/javase/tutorial/essential/exceptions/

И еще одна хорошая статья: http://www.javaworld.com/javaworld/jw-07-1998/jw-07-exceptions.html

Если вы хотите разделить критические ситуации на некритические, просто сделайте это:

try {
// get here all your work
} catch (TerribleException e) {
// log and exit the application
} 

и в своей работе просто не бросайте никаких исключений. Просто запишите ситуацию и продолжайте работу. Поэтому все, что вам нужно, это определить, какие ситуации должны остановить выполнение, а затем выдать некоторое исключение в этом месте и перехватить его в классе, который запускает работу.

0 голосов
/ 17 ноября 2010

Вы не упоминаете Exception s в своем вопросе - используете ли вы их уже?

Если нет, то это именно то, для чего они созданы.

Если вы это сделаете,тогда вам нужно переосмыслить, как вы ловите исключения для вашей регистрации.

0 голосов
/ 17 ноября 2010

Вы только что описали исключения и обработка исключений , особенность Java с первого дня.

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