Transformar JTextArea em um console igual ao System.out.println[resolvido]

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.

sds

j.silvestre

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…

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

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.

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.

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 [

pois é pessoal

Não consigo retirar os caracteres de controle da string.


if(connection.bufferSerial.contains("[1;34m")) // connection.bufferSeria é minha String
   connection.bufferSerial = connection.bufferSerial.replaceAll("[1;34m", "");// nesta linha o editor do netbeans já diz expressão regular 
                                                                                                             // invalida

executando da a seguinte interrupt

Exception in thread "Thread-3" java.util.regex.PatternSyntaxException: Unclosed character class near index 5
[1;34m
     ^
	at java.util.regex.Pattern.error(Pattern.java:1713)

retirando o “[” roda normal mas fica o “[” impresso.

 connection.bufferSerial = connection.bufferSerial.replaceAll("1;34m", ""); // funciona normal

sds

j.silvestre

... private static final String ESC = "\u001B";
...
if(connection.bufferSerial.contains(ESC + "[1;34m")) // connection.bufferSeria é minha String  
   connection.bufferSerial = connection.bufferSerial.replaceAll( Pattern.quote (ESC + "[1;34m"), "");// nesta linha o editor do netbeans 

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”) :

connection.bufferSerial = connection.bufferSerial.replaceAll( ESC + "\\[" + "([0-9]+;)?[0-9]*[A-Za-z]"), "");

Grande entanglement

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.

valeu.

j.silvestre