Java добавить к сообщению пользовательского исключения, в месте, где определенная функция выдает исключение - PullRequest
0 голосов
/ 30 января 2019

У меня есть метод, который выбрасывает мое пользовательское исключение.Мое пользовательское исключение:

public class IllegalEntryException extends Exception
{
    public IllegalEntryException(String message)
    {
        super(message);
    }
}

и мой метод:

    public Order(String[] value) throws IllegalEntryException
    {
        String timeString = value[0];
        try
        {
            this.time = Integer.parseInt(timeString);
        }
        catch(NumberFormatException e)
        {
            throw new IllegalEntryException("First entry of each column, time must be int, found at row ");
        }
    }

Теперь о методе, который фактически вызывает эту функцию (которая также является конструктором), у меня есть доступ к переменной, которая отслеживаетномер строки файла, в котором возникает эта ошибка.Я хочу добавить этот номер строки к сообщению, когда было сгенерировано исключение (т. Е. В конструкторе), чтобы, когда я наконец его обработал, там также был напечатан номер строки.
Что-то вроде:

try
{
    calltoFunction(); // exception is thrown
    // somehow add the row number to the message
}
catch {}//Handle the exception over here

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

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

    e.getStackTrace();

Кроме того,

    e.printStackTrace();

выведет указанную трассировку стека в поток System.out, что должно быть достаточно для целей отладки.

Я не знаю, чего вы пытаетесь достичь, имея номер строкив блоке catch, но вы можете попытаться получить всю трассировку стека в виде строки следующими способами:


    StringWriter stringWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(stringWriter);
    e.printStackTrace(printWriter );
    String stackTrace = stringWriter.toString();

Из строки stackTrace вы можете затем определить номер строки.

0 голосов
/ 30 января 2019

Очень жаль, что я искал что-то вроде этого:

                try
                {
                    Order order = new Order(values);
                }
                catch(IllegalEntryException e)
                {
                    String error = e.getMessage() + "row_no";
                    System.err.println(error);
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...