2014-12-31 4 views
0

그래서 'Functions.java'파일에 다음과 같은 메소드가 있습니다.Sysout 값을 JTextArea로 라우팅

public static void updateDataToExcel (String ExcelFileName) throws IOException { 
... 
... 
System.out.println("File Not Found!"); 
... 
Sysout("File Created!"); 
... 
Sysout("Data Updated"); 
... 
} 

이제 '텍스트 영역'을 사용하는 기본 클래스에서 이것을 호출합니다. 따라서 'sysout'에 도달 할 때마다 데이터가 아래 텍스트 영역에서 업데이트되고 콘솔에서는 no로 업데이트됩니다. 이를 위해

JTextArea txtrExecutionStatus = new JTextArea(); 
txtrExecutionStatus.setFont(new Font("Verdana", Font.PLAIN, 11)); 
txtrExecutionStatus.setText("Execution Status:\r\n"); 
txtrExecutionStatus.setBounds(53, 188, 378, 102); 
panel.add(txtrExecutionStatus); 

, 내 기본 클래스 (Object.java)에 클래스를 생성하여 액세스 "txtrExecutionStatus"을 시도하지만, JTextArea에 액세스 할 수 없습니다.

제안 사항? 우리는 Console에서 다른 오브젝트로 sysout을 라우트 할 수 있지만 Google에서 회신/응답을 얻을 수 없다는 것을 오랫동안 기억합니다.

미리 감사드립니다. 그리고 새해 복 많이 받으셔도 좋습니다. :)

답변

1

System.out은 System.setOut(PrintStream)으로 리디렉션 될 수 있습니다. PrintStream는 OutputStream 바이트에서 작동합니다. 그래서 OutputStream을 만들어야합니다. 그러면 OutputStream이 해당 바이트를 String (유니 코드)로 변환합니다. 그런 다음 JTextArea.append을 사용할 수 있습니다. PrintStream의 autoflushing을 true로 설정했습니다. 그리고 라인을 현명하게 플러시하기 위해 지나치게 넘어 섰다. 조금 더 나은 성능을 위해서.

JTextArea txtrExecutionStatus = new JTextArea(); 
... 
OutputStream textAreaOut = new OutputStream() { 
    private ByteArrayOutputStream lineBuffer = new ByteArrayOutputStream(); 

    @Override 
    public void write(int b) { 
     lineBuffer.write(b); 
    } 

    @Override 
    public void flush() { 
     byte[] bytes = lineBuffer.toByteArray(); 
     lineBuffer.reset(); 
     String line = new String(bytes); // Default OS encoding. 
     txtrExecutionStatus.append(line); 
    } 
} 

PrintStream redirect = new PrintStream(textAreaOut, true); 
System.setOut(redirect); 
+0

Joop. 이것은 잘 작동합니다! :) –

+0

Joop, 몇 가지 문제가 있습니다. sysout ("1st line")을 인쇄 할 때; 다음 ("2 선") SYSOUT, I는 다음과 같이 텍스트 영역에 두 개의 출력을 얻을 below.Output # 1 : 1 SYS 밖으로 out1st 1 SYS : SYS 밖으로 1 SYS 밖으로 출력 # 2 out1st 1 SYS SYS 밖으로 1 SYS 밖으로 2 sys 인 out1st SYS 밖으로 2 sys 인 밖으로 1 SYS 밖으로 2 sys 인 밖으로 –

+0

미안 해요, 난 잊었'lineBuffer.reset()는 출력 된 바이트의 버퍼를 reemptying하고하는 것은 추가하는 코드 조금 후에. 분명히 이미 원본 버전을 사용했습니다. –

관련 문제