Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di iopa89
    Registrato dal
    Sep 2008
    Messaggi
    11

    da "System.out" a "TextArea": come faccio???

    salve a tutti i ragazzi del forum. volevo chiedere se fosse possibile fare una cosa del genere.

    l'applet è completo, inserisco dei dati in input che vengono correttamente processati. UNICO PROBLEMA: l'output con il risultato finale è, ovviamente, su TERMINALE e non all'interno della TextArea "risultato" da me creata.

    non vorrei riscrivere tutte le "System.out.print" se possibile. ed essendo abbastanza niubbo in materia vorrei sapere se avete già esempi di codice che potrebbero permettermi di reindirizzare tutto il "System.out" nella TextArea (non JText) "risultato". qualche proposta???

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Una soluzione potrebbe essere la seguente: all'interno del metodo init() dell'applet setti l'output generale su di un oggetto di tipo "AreaOutputStream" (vedi codice più avanti):

    codice:
    AreaOutputStream area;
    JTextArea tuaJTextArea;
    ...
    public void init() {
       tuaJTextArea = new JTextArea();
       ...
       area = new AreaOutputStream( tuaJTextArea );
       System.setOut( area );
       System.setErr( area );
    }
    E questo è il codice dell'AreaOutputStream

    codice:
    import java.io.*;
    import javax.swing.JTextArea;
    
    public class AreaOutputStream extends OutputStream {
       private JTextArea jta = null;
       private PrintStream log = null;
       private boolean attivo;
       private boolean useLog;
    
       public AreaOutputStream(JTextArea jta) {
          this(jta, null);
       }
    
       public AreaOutputStream(JTextArea jta, String nomeFileLog) {
          this.jta = jta;
          attivo = true;
          useLog = (nomeFileLog != null);
          if ( useLog ) {
             try {
                log = new PrintStream( new FileOutputStream(nomeFileLog) );
             } catch (Exception e) {
                useLog = false;
                e.printStackTrace();
             }
          }
       }
    
       public void close() throws IOException {
          attivo = false;
          if ( useLog ) {
             log.close();
          }
       }
    
       public void write(byte[] b) throws IOException {
          write(b, 0, b.length);
       }
    
       public void write(byte[] b, int off, int len) throws IOException {
          if ( attivo ) {
             String s = "";
             for(int i=0; i<len; i++) s += (char) b[i+off];
             if (jta != null) {
                jta.append(s);
                if ( useLog ) {
                   log.print( s );
                   log.flush();
                }
             } else {
                throw new IOException("No JTextArea specified for output");
             }
          }
       }
    
       public void write(int b) throws IOException {
          if ( attivo ) {
             if (jta != null) {
                jta.append("" + ((char) b));
                if ( useLog ) {
                   log.print("" + ((char) b));
                   log.flush();
                }
             } else {
                throw new IOException("No JTextArea specified for output");
             }
          }
       }
    }
    Qualunque System.out verrà redirezionato nella JTextArea.
    Se usi AWT e non Swing, ovviamente, il codice andrà riadattato.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di iopa89
    Registrato dal
    Sep 2008
    Messaggi
    11
    grazie. mi metto subito all'opera e ti faccio sapere.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: da "System.out" a "TextArea": come faccio???

    Originariamente inviato da iopa89
    l'applet è completo, inserisco dei dati in input che vengono correttamente processati. UNICO PROBLEMA: l'output con il risultato finale è, ovviamente, su TERMINALE e non all'interno della TextArea "risultato" da me creata.
    Ma se hai fatto una "applet" ..... non avresti dovuto usare lo standard-output per la visualizzazione di qualunque "risultato".
    In una applet sarebbe appropriato scrivere su standard-output/error solo per informazioni di "log/debug". Per qualunque altro "risultato" reale, avresti dovuto usare degli appositi componenti grafici da visualizzare nella applet.

    Originariamente inviato da iopa89
    non vorrei riscrivere tutte le "System.out.print" se possibile.
    Peccato ... perché sarebbe la cosa più sensata.

    Originariamente inviato da iopa89
    vorrei sapere se avete già esempi di codice che potrebbero permettermi di reindirizzare tutto il "System.out" nella TextArea (non JText) "risultato". qualche proposta???
    out di System è un campo che non modifichi direttamente ma solo attraverso il setOut(PrintStream out) di System.
    Quindi la questione è solo quella di creare un apposito PrintStream che sotto-sotto vada poi alla fin fine a scrivere sulla text area. In realtà creare un "tuo" PrintStream risulta pesante, quindi in questi casi si implementa un apposito OutputStream. Va però fatto in modo accurato .... gli OutputStream trattano byte, non caratteri. Quindi dovresti fare in modo che il PrintStream scriva sul TuoOutputStream con un charset "noto" e fisso, in modo che tu possa ricostruire i char dai byte.

    Si può fare (e se cerchi sul forum forse trovi già qualcosa, anche di mio) anche se non è banalissimo.

    Oops, non ho visto le risposte già date.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di iopa89
    Registrato dal
    Sep 2008
    Messaggi
    11
    ho letto la tua risposta. intanto grazie. l'intenzione, dato che ho solamente 3 system.out print in tutto il programma (a questo punto vista la difficoltà) sarebbe quella di provare a modificarli (uso awt e non swing, e già questo mi penalizza in parte)

    al posto di una System.out cosa posso usare per stampare il risultato di un operazione all'interno di una stringa? non capisco perchè ma append me lo segnala come errore...

    cioè fai caso che ho un operazione collegata ad un ciclo for. per n<50, lui fa n*2. come posso fare scrivere ogni risultato (quindi 0, 2, 4, 6...) all'interno di una stringa e poi fare richiamare questa stringa all'area di testo?

  6. #6
    Utente di HTML.it L'avatar di iopa89
    Registrato dal
    Sep 2008
    Messaggi
    11
    ragazzi ho praticamente risolto. ora mi manca una cavolata, cioè far inserire la stringa "risultato" all'interno della textarea.

    se per trasferire da textarea a stringa uso gettext, cosa devo usare ora?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Concordo con andbin quando dice che sarebbe più opportuno riscrivere completamente l'applet facendo un uso più coerente degli strumenti.

    Aggiungo una correzione alla mia risposta precedente:

    codice:
    System.setOut( new PrintStream(area) );
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da iopa89
    al posto di una System.out cosa posso usare per stampare il risultato di un operazione all'interno di una stringa? non capisco perchè ma append me lo segnala come errore...
    java.awt.TextArea appunto ha un append(String). Basta che hai il reference alla TextArea a portata di mano (mettilo tra le variabili di istanza) e non vedo particolari problemi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di iopa89
    Registrato dal
    Sep 2008
    Messaggi
    11
    no beh, praticamente ho risolto. il risultato del calcolo non utilizza più delle "system.out". ora mi servirebbero due piccoli tips ed il gioco è fatto:

    1) nella stringa "finale" ho stampato il risultato del calcolo. ora come faccio a far inserire nella TextArea (awt, non JText) chiamata "risultato" il contenuto di questa stringa?

    2) esiste un comando che cancella l'intera stringa tra un esecuzione ed un altra? o almeno un comando che se anche all'interno della stringa c'è del materiale, svuota completamente la stringa?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da iopa89
    1) nella stringa "finale" ho stampato il risultato del calcolo. ora come faccio a far inserire nella TextArea (awt, non JText) chiamata "risultato" il contenuto di questa stringa?
    Continuo a non capire il problema .... TextArea ha 3 metodi per inserire "qualcosa": append(String s), insert(String s, int pos) e setText(String s). Cosa è che ti "manca"??

    Originariamente inviato da iopa89
    2) esiste un comando che cancella l'intera stringa tra un esecuzione ed un altra? o almeno un comando che se anche all'interno della stringa c'è del materiale, svuota completamente la stringa?
    Ma parli sempre di TextArea?? setText("")
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.