Transformar JTextArea em um console igual ao System.out.println[resolvido]
9 respostas
j.silvestre
Olá pessoal
estou com o seguinte problema:
Estou recebendo dados pela serial e salvando em uma String.
quando pego a string e imprimo com System.out.println ela imprime assim:
DemoConsole
quando dou um append com a mesma string em JTextArea aparece assim ;
[1;34mDemoConsolee[0m
Esta string acima é o nome diretório do linux que estou recebendo pela serial. O system.out.println deixa até em cores diferentes os diretórios
e arquivos.
Gostaria que o append imprima igual ao System.out.println.
Amigo, cole a parte do codigo onde o sistema deve fazer a impressao da leitura do serial, é dificil de adivinhar se há algo errado no seu codigo, sem visualizar o seu codigo.
E não adianta eu ficar dando palpite se voce pode estar fazendo este procedimento de outra maneira…
j.silvestre
consegui redirecionar o system.out.println para o JtextArea:
mas continua imprimindo os caracteres de controle. então não adiantou nada.
sds
j.silvestre
gomesrod
O tratamento dos caracteres de controle é uma propriedade da console do sistema operacional (e talvez a da IDE), não é a String em si que é “colorida”.
Então não se pode esperar que ao escrever a String em qualquer lugar (um componente gráfico, uma página web, um arquivo, etc) ela vá sair com as cores determinadas pelo caractere de controle, eles acabam sendo entendidos como lixo.
A solução é limpar a string antes de exibir. Se estiver ao seu alcance modifique o programa que gerou o dado para que ele transmita os dados sem a sujeira.
ViniGodoy
Esses caracteres são códigos de pintura ascii.
Basta remover do [ até os caracteres m, C ou D.
Geralmente dos caracteres [ até o C tem um número, que indica o número de espaços a serem dados na String. Talvez você queira tratar. Por exemplo
[10C significa que são 10 espaços seguidos.
Eu tenho uma classe que faz esse tratamento, mas ela é muito extensa e específica para postar aqui, já que é usada para fluxos de dados de redes.
E
entanglement
Não se esqueçam que vocês não estão vendo o ESC na hora de visualizarem no JTextArea (por exemplo, ESC [1;34m é tecnicamente chamado de SGR - http://en.wikipedia.org/wiki/ANSI_escape_code .
Portanto, é necessário não só eliminar o [1;34m como também o caracter ESC (\u001B).
O artigo que menciono escreve “CSI” mas isso não é aquele seriado (Crime Scene Investigation) mas sim a sequência ESC [
…
j.silvestre
pois é pessoal
Não consigo retirar os caracteres de controle da string.
if(connection.bufferSerial.contains("[1;34m"))// connection.bufferSeria é minha Stringconnection.bufferSerial=connection.bufferSerial.replaceAll("[1;34m","");// nesta linha o editor do netbeans já diz expressão regular // invalida
retirando o “[” roda normal mas fica o “[” impresso.
connection.bufferSerial=connection.bufferSerial.replaceAll("1;34m","");// funciona normal
sds
j.silvestre
E
entanglement
...privatestaticfinalStringESC="\u001B";
...
if(connection.bufferSerial.contains(ESC+"[1;34m"))//connection.bufferSeriaéminhaStringconnection.bufferSerial=connection.bufferSerial.replaceAll(Pattern.quote(ESC+"[1;34m"),"");// nesta linha o editor do netbeans
E
entanglement
Na verdade, você está sendo muito “bitolado” porque acha que só vai aparecer ESC [ 1; 34 m.
Que tal verificar quais as sequências ANSI que podem aparecer? Provavelmente você vai fazer algo como (e não vai precisar do “contains”) :
Verdade aparece varias variações. Nome de diretorio vem uma , nome de arquivo .sh vem outra e assim vai…
com sua dica acima funcionou, eu não estava retirando o ESC.