Newsgroup: it.comp.java
Titolo: Simil-console in Swing: volete provare?

Ciao a tutti
Vorrei condividere con voi una piccolo strumento che ho sviluppato per
necessitï¿œ personale, e che ora sto usando praticamente ovunque ci sia
del codice java su cui posso mettere le mani.
Si tratta di una console testuale (al pari del prompt dei comandi di
Windows), fatta perï¿œ utilizzando Swing, quindi basandomi solo sulla
libreria di base fornita chiavi-in-mano con una qualsiasi installazione
del JDK.
L'unico requisito ï¿œ appunto il JDK 1.6.0, e niente altro.
Potete scaricare il pacchetto qui:
http://www.webalice.it/ech3l0n/JVCon.zip
Troverete il jar da includere nei vostri progetti, e anche il codice
sorgente se siete curiosi. La documentazione ï¿œ inclusa nel codice
sorgente, ma le classi di cui dovrete preoccuparvi sono principalmente
ConsoleFactory e VirtualConsole.
Per allocare una console ï¿œ possibile usare uno qualsiasi dei metodi di
ConsoleFactory. Una volta allocata, questa sarï¿œ immediatamente visibile
su schermo. Per scrivere all'interno della console sarï¿œ necessario
ottenere il PrintWriter associato allo "standard output" (getStdout),
mentre per poter leggere l'input dell'utente dovrete ottenere il
BufferedReader associato allo "standard input" (getStdin).
Ho fatto il possibile per nascondere tutti i problemi di
sincronizzazione con il thread degli eventi di Swing (sicuramente avrï¿œ
dimenticato qualcosa). La cosa migliore ï¿œ utilizzare gli input/output
"standard" senza pensarci troppo.
Ricordatevi di chiudere qualsiasi console aperta prima dell'uscita dal
programma: basta richiamare close(), che provvederï¿œ a liberare tutte le
risorse usate - o, se siete impazienti, un System.exit vi libererï¿œ di
ogni pensiero, anche se non ï¿œ il metodo piï¿œ pulito.
Si, ï¿œ vero, vi sto chiedendo il favore di farmi da beta-tester...
ricordatevi che qualsiasi commento, bello o brutto che sia, ï¿œ sempre
gradito.
Grazie mille a chiunque voglia darmi una mano.
Ciao!
-- 
Scientology: se la conosci la eviti, se la conosci non ti uccide...
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx
 - 
http://www.xenu.net
(per rispondere personalmente leva IlDitoDalCulo)
---> 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 <---

 ---> 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 <---
Non l'ho provata, ma leggendo la descrizione, ti butto la un
suggerimento.
Mi pare che la classe System abbia la possibilità di sostituire le
variabili statiche out, in ed err. Potrebbe essere carino farlo con il
tuo getStdin e soci, in modo tale che uno possa fare un semplice
System.out.println(); e così scrivere sulla TUA console
La cosa, anche se carina, ha però degli svantaggi:
1) Non puoi più scrivere nulla nella vera console (per debug ad
esempio)
2) Se per caso questa console viene incorporata in un progetto più
grosso (a proposito, licenza?), questo potrebbe non gradire la
sostituzione dello stream
Potresti, per risolvere il 2, fare si che gli stream vengano
sostituiti nel main(String[]), in questo modo se lanci da console fai
l'override degli stream, altrimenti no.
In alternativa potresti mettere un flag per attivare la funzione da
linea di comando, o nel costruttore.
O semplicemente fare un System.out = tuaConsole.getStdIn(); quando +
ti aggrada.
Semplicemente volevo condividere un idea che mi pareva carina.(l'ho
vista su RoboCode, dove ciascun robot ha la SUA console e ci scrive
con normali System.out.print(..)

 con normali System.out.print(..)
Ci ho pensato anch'io, ma ho preferito evitare per due motivi, il primo
dei quali l'hai detto proprio te (alcuni programmi potrebbero non
gradire la sostizione degli stream).
Il secondo ï¿œ che nelle prime fasi di sviluppo di una qualsiasi
applicazione, in caso di piantaggi clamorosi puï¿œ rendersi necessario
terminare brutalmente il processo java: in questo caso la console swing
viene chiusa senza dare possibilitï¿œ di leggere eventuali stack trace.
Piuttosto il metodo che uso ï¿œ la creazione della console swing
all'interno del main, mettendo poi a disposizione gli stdout/stdin in
variabili pubbliche statiche all'interno della classe principale (non
c'ï¿œ differenza concettuale rispetto a System.in e System.out). Durante
lo sviluppo dell'applicazione infine, invece di usare
System.out.println() uso sempre MiaClasse.stdout.println().
Ah, la licenza ï¿œ LGPL: il codice ï¿œ aperto e visibile a tutti, ed
essendo uno strumento di aiuto allo sviluppo acconsento all'uso
all'interno di progetti commerciali. Eventuali modifiche alla libreria
perï¿œ dovranno essere rese aperte come il codice sorgente originario. Si
ï¿œ vero, dovevo includere il file di licenza nello zip...
Grazie per i tuoi suggerimenti, aspetto eventuali giudizi
sull'usabilitï¿œ della libreria.
Ciao!
-- 
Scientology: se la conosci la eviti, se la conosci non ti uccide...
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx
 - 
http://www.xenu.net
