2015-01-29 2 views
0

SSH를 사용하여 서버에 연결하고 내 명령에 대한 출력을 얻으려고했습니다. System.out에 넣으면 모든 것이 잘 작동합니다. 그렇지 않으면 JTextPane에 넣으 려하지만 넣으면됩니다. 그러나 MC는 읽을 수 없습니다.JTextPane에서 Midnight Commander 화면 표시

JSch jsch = new JSch(); 

String command = ""; 
String commandR = ""; 
host = null; 

if (arg.length > 1) { 
    host = arg[0]; 
    command = arg[2]; 
    commandR = arg[3]; 
} 

String user = host.substring(0, host.indexOf('@')); 
host = host.substring(host.indexOf('@') + 1); 
Session session = jsch.getSession(user, host, 22); 
Properties config = new Properties(); 
config.put("StrictHostKeyChecking", "no"); 
session.setConfig(config); 

session.setPassword(arg[1]); 
if (!session.isConnected()) { 
    session.connect(); 
} 

Channel channel = session.openChannel("shell"); 

String ans = " "; 
InputStream in = channel.getInputStream(); 
OutputStream out = channel.getOutputStream(); 
//channel.setInputStream(System.in); 
if (!channel.isConnected()) { 
    channel.connect(10 * 1000); 
} 
boolean logon = false; 
boolean started = false; 
boolean brtuser = false; 
boolean log = false; 
byte[] tmp = new byte[1024]; 

JFrame j = new JFrame(); 
JTextPane jj = new JTextPane(); 
jj.setContentType("text/html"); 
StyledDocument doc = (StyledDocument)jj.getDocument(); 
jj.setPreferredSize(new Dimension(500, 600)); 
j.setDefaultCloseOperation(2); 
j.add(new JScrollPane(jj)); 
j.pack(); 
j.setVisible(true); 
while (!started) { 

    while (in.available() > 0) { 
     int i = in.read(tmp, 0, 1024); 
     if (i < 0) { 
      break; 
     } 

     // jj.append(); 

     doc.insertString(doc.getLength(), new String(tmp, 0, i), null); 
     ans += new String(tmp, 0, i); 
     System.out.print(new String(tmp, 0, i)); 

가 그럼 난 pwdmc 쓰기 - pwd 내가 잘 얻을,하지만 mc 같은

39m[49m                    
    [37m[40m                    [23;3H[22;1H[39m[49mGNU Midnight Commander 4.6.0              
     [1;1H[30m[46m Left  File  Command  Options  Right        
    [37m[44m+[0m[37m[44m<[37m[44m-[0m[37m[44m~[37m[44m---------------------------------[0m[37m[44mv>[37m[44m++[0m[30m[47m<[37m[44m-[0m[30m[47m~[37m[44m---------------------------------[0m[30m[47mv>[37m[44m+ 
    |[0m[1m[33m[44m  Name  [0m[37m[44m|[0m[1m[33m[44m Size [0m[37m[44m|[0m[1m[33m[44m MTime [0m[37m[44m||[0m[1m[33m[44m  Name  [0m[37m[44m|[0m[1m[33m[44m Size [0m[37m[44m|[0m[1m[33m[44m MTime [0m[37m[44m| 
    |[0m[1m[37m[44m/..    [0m[37m[44m|[0m[1m[37m[44mUP--DIR[0m[37m[44m|[0m[1m[37m[44m   [0m[37m[44m||[0m[30m[46m/..    [30m[46m|[0m[30m[46mUP--DIR[30m[46m|[0m[30m[46m   [37m[44m| 
    |[0m[1m[37m[44m/.mc    [0m[37m[44m|[0m[1m[37m[44m 1024[0m[37m[44m|[0m[1m[37m[44mJan 29 11:35[0m[37m[44m||[0m[1m[37m[44m/.mc  

날은 볼 얻을 도와주세요 수 있습니다 :

이 내 코드입니다!

답변

0

JTextPane에 나오는 "쓰레기"는 ANSI escape codes입니다. 색상 및 기타 서식을 정의합니다. Midnight Commander (및 다른 응용 프로그램)에서 텍스트 콘솔에 GUI와 같은 인터페이스를 렌더링하는 데 사용했습니다.

ANSI 이스케이프 코드는 PuTTY와 같은 터미널/SSH 클라이언트에서 이해할 수 있습니다. 다양한 OS의 콘솔 창 (예 : Windows)에서도. 아마도 출력물을 System.out으로 인쇄 할 때 왜 그렇게 보일까요?

그러나 이들은 JTextPane에 의해 이해되지 않고 그대로 표시됩니다.

"ANSI colored JTextPane subclass"에 대해서는 ANSI colors in Java Swing text fields을 참조하십시오.

+0

감사합니다. 그게 다야! – Mihail