2015-07-07 2 views
0

Я печати трассировки стека в JTextArea используя код ниже:Печать Трассировка стека в текстовое поле

 try 
     { 
      throw new IOException(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(pw); 
      ta1.append(sw.toString()); 
     } 
     pw.flush(); 
     sw.flush(); 
     try 
     { 
      throw new SQLException(); 
     } 
     catch(SQLException e) 
     { 
      e.printStackTrace(pw); 
      ta1.append(sw.toString()); 
     } 

Он печатает 2 IOException следы и 1 SQLExeption след. Почему не стример вымывается?

Я хочу 1 IOException след и 1 SQLExeption след.

Пожалуйста, предложите правильный способ для этого.

ответ

1

flush способ StringWriter ничего не делает! Метод flush только что должен быть совместим с java.io.Writer.

StringWriter Источник:

/** 
* Flush the stream. 
*/ 
public void flush() { 
} 

И PrintWriter Вызовите StringWriterflush метод ...

PrintWriter Источник:

/** 
* Flushes the stream. 
* @see #checkError() 
*/ 
public void flush() { 
    try { 
     synchronized (lock) { 
      ensureOpen(); 
      out.flush(); 
     } 
    } 
    catch (IOException x) { 
     trouble = true; 
    } 
} 

Так что, если вы хотите, чтобы очистить pw и sw вы не должны использование flush способ. Вам нужно создать новый.

см:

What sense does it make to flush a StringWriter in Java?

How do you "empty" a StringWriter in Java?

+0

что, если программа имеет много печатать, поэтому я буду создавать новые писатели каждый раз в течение только Append? Есть ли какой-либо другой класс, чем 'StringWriter', который реализует flush для очистки своего базового буфера? –

+0

Трудно помочь без остального кода ... Возможно, вы можете найти подкласс StringWriter с использованием метода flush, который работает. Или перепишите свой код без StringWriter ... StringBuilder/StringBuffer специально предназначен для сборки строки (StringWriter использует StringBuffer ...), но я не знаю, возможно ли это в вашем коде. – dams

Смежные вопросы