|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
[Java] redirigere l'output
Da un'applicazione Swing devo prendere lo standard output dell'applicazione stessa e visualizzarlo.
Come posso fare ? |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 274
|
System.setOut(new PrintPane(System.out))
dove PrintPane è una tua classe che estende PrintStream. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Supponiamo che si voglia mandare lo standard output (o error) su una JTextArea. La prima cosa che mi viene in mente è fare una classe che estende PrintStream così: Codice:
import java.io.*;
import javax.swing.*;
public class JTextAreaPrintStream extends PrintStream
{
public JTextAreaPrintStream (JTextArea textArea)
throws UnsupportedEncodingException
{
super (new DummyOutputStream (textArea), true, "ISO-8859-1");
}
private static class DummyOutputStream extends OutputStream
{
private JTextArea textArea;
public DummyOutputStream (JTextArea textArea)
{
this.textArea = textArea;
}
public void write (int b)
{
textArea.append (String.valueOf ((char) b));
}
}
}
Ci sono dei problemini: - Dovendo usare un OutputStream, posso trattare solo dei byte, non caratteri. Nel codice sopra creo il PrintStream con charset ISO-8859-1 e nel DummyOutputStream ottengo un carattere direttamente dal byte. - C'è la questione del "caret" della JTextArea, sarebbe meglio spostarlo ad ogni inserimento. Come farlo nel modo migliore è da valutare. Con un po' di "sbattimento" questi problemini si potrebbero credo risolvere. Per la questione del charset si potrebbe creare il PrintStream con un charset tipo UTF-16LE e quindi nel DummyOutputStream posso sapere con certezza che un carattere è formato da 2 byte e quind ricostruire il carattere.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Puoi usare una Pipe (java.nio.channels) e uno scanner.
Colleghi l'entrata a System.out e System.err e l'uscita ad uno Scanner. Affidi lo Scanner ad un Thread (demone) e gli fai leggere le linee in uscita. Quelle linee le accodi ad un Document e sei a posto. Ricorda di usare l'EDT per modificare il contenuto del documento di testo.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Comunque in questo modo catturo proprio lo standard output o solo lo stream System.out...mi spiego: nel mio programma ho una JNI, alcuni metodi di questa fanno l'output sullo stdout, quindi suppongo che non usino Java, ma il sistema nativo per fare l'output... Comunque ora provo...
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Sep 2005
Messaggi: 274
|
Quote:
Ma cosa significa EDT? Grazie! |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Event Dispatcher Thread.
x cionci: redirigi l'output del processo java.exe (o javaw.exe), jni inclusi.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:38.




















