Да, это такая строка:
line = console.readLine();
console
по-прежнему равно нулю. Даже если вы звоните start()
, он не делает то, что вы думаете:
public void start() throws IOException
{ BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
Здесь объявляется новая локальная переменная с именем console
. Это не меняет значение переменной instance с именем console
. Для этого необходимо удалить часть объявления:
public void start() throws IOException
{
console = new BufferedReader(new InputStreamReader(System.in));
...
Даже с этим изменением у вас могут возникнуть проблемы - потому что если выдает , выдает исключение, вот что вы делаете с ним в конструкторе:
catch(IOException ioe)
{ System.out.println("Unexpected exception: " + ioe.getMessage());
}
Затем вы продолжаете, как будто ничего не произошло. Не делай этого. Вы на самом деле не «обрабатываете» исключение - поэтому вы почти наверняка должны либо не поймать его, либо сбросить в блоке улова.
Кроме того, ваш бодрящий стиль очень плотный, очень нестандартный и непоследовательный. Я бы настоятельно рекомендовал не включать код после открывающей скобки (в той же строке). На самом деле, ваш код довольно трудно прочитать для тех, кто привык к одному из (более) более распространенных соглашений:
if (foo) {
// Do something
}
или
if (foo)
{
// Do something
}