View Full Version : [JAVA] emulare console
Wilcomir
25-07-2006, 15:00
ciao a tutti, volevo sapere se è in qualche modo possibile emulare la console, tramite una jlabel.
mi spiego meglio.
vorrei che tutto quello che viene "scritto" dal sistema nella console venisse scritto anche in una jlabel, che quindi mi servirebbe solo come output, non come input...
questo ovviamente non solo per i vari system.out ma anche printstacktrace et similia.
ciao!
franksisca
25-07-2006, 20:24
certo che puoi :mbe: :mbe: :mbe:
scusa, ma le JLabel, hanno la stampa, e inceve di fare un System.out.println(x);
fai un label.setText(x);
dov'è il problema???
certo che puoi :mbe: :mbe: :mbe:
scusa, ma le JLabel, hanno la stampa, e inceve di fare un System.out.println(x);
fai un label.setText(x);
dov'è il problema???No, credo che Wilcomir intendesse dire questo: che qualunque utilizzo di System.out (anche da parte di eventuale codice non suo) possa mandare l'output anche da un'altra parte come ad esempio in componente Swing.
La cosa è sicuramente fattibile. La classe System fornisce ad esempio il metodo setOut(PrintStream out) che permette di riassegnare lo standard output.
Il problema semmai è: che PrintStream devo avere e/o creare da passargli??? :confused:
franksisca
25-07-2006, 20:47
No, credo che Wilcomir intendesse dire questo: che qualunque utilizzo di System.out (anche da parte di eventuale codice non suo) possa mandare l'output anche da un'altra parte come ad esempio in componente Swing.
La cosa è sicuramente fattibile. La classe System fornisce ad esempio il metodo setOut(PrintStream out) che permette di riassegnare lo standard output.
Il problema semmai è: che PrintStream devo avere e/o creare da passargli??? :confused:
aaaa, tipo quando si fà il reinderezzamento dell'output su un file in c, adesso ho capito.
Credo di si, e quello che ha detto andbin sia il metodo giusto.
EDIT:questo è quello che dice le API di JAVA
static void setOut(PrintStream out)
Reassigns the "standard" output stream.
Wilcomir
25-07-2006, 21:14
uhm... e come associare il printstream alla mia jtextarea? :D
ciao!
EDIT sto dando un'occhiata alle API ma non è che ci capisca molto... se qualcuno può scrivermi un esempino :D
ciau!
Ci ho provato e .... sono riuscito. Il codice l'ho scritto un po' in fretta (vorrei andare a dormire :p ) ma funziona!
import java.io.*;
import javax.swing.*;
public class RedirectTestFrame extends JFrame
{
private JTextArea ta;
private JTextAreaOutputStream taos;
public RedirectTestFrame ()
{
super ("Redirect Test Frame");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (300, 300);
ta = new JTextArea ();
add (ta);
taos = new JTextAreaOutputStream (ta);
System.setOut (new PrintStream (taos));
}
public static void main (String[] args)
{
RedirectTestFrame f = new RedirectTestFrame ();
f.setVisible (true);
System.out.println ("1 Ciao, stampa nella textarea!!!");
System.out.println ("2 Ciao, stampa nella textarea!!!");
System.out.println ("3 Ciao, stampa nella textarea!!!");
System.out.println ("4 Ciao, stampa nella textarea!!!");
}
}
class JTextAreaOutputStream extends OutputStream
{
private JTextArea ta;
public JTextAreaOutputStream (JTextArea ta)
{
this.ta = ta;
}
public void write (int b)
throws IOException
{
ta.append ("" + (char) b);
}
}L'output delle 4 System.out va a finire nella TextArea!
Enjoy. ;)
Wilcomir
25-07-2006, 21:58
se non sei ancora andato a dormire... ma il JTextAreaOutputStream dove l'hai trovato? gli import sono gli stessi, e in ogni caso non lo trovo nelle API :mc:
ciao!
EDIT che idiota è la classe sotto... come non detto :D
RIEDIT funziona alla grande! grazie!
ciaoo!
funziona alla grande!Sì funziona ma ... c'è un dettaglio che potrebbe essere importante. Ho derivato la classe OutputStream perché ho visto che la documentazione dice: "Applications that need to define a subclass of OutputStream must always provide at least a method that writes one byte of output."
Quindi basta fare l'override di write(int b) che però prende in input 1 byte nudo e crudo, non un char.
Questo vuol dire che facendo una:
System.out.println ("Questa \u00e8 una prova");
la 'e' accentata (indicata in unicode come \u00e8) verrebbe visualizzata nella TextArea come un quadratino. :(
In teoria si dovrebbe estendere la classe PrintStream però si dovrebbe fare l'override di tutti i metodi print(xxx) e println(xxx) come minimo. Adesso ci provo e vedo cosa salta fuori. ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.