Ciao a tutti,

cerco di esporvi il mio problema. Io ho una classe java molto semplice scritta per essere eseguita dal prompt dei comandi. L'unico input da parte dell'utente avviene come parametro della riga di comando e l'output sono una serie di righe stampate sullo standard out (System.out.print senza ridefinizione dell'outputstream).

Ora ho l'esigenza di fornire una sorta di "frontend" che permetta in modo intuitivo l'esecuzione di questa classe. Quindi prendendo spunto da un tutorial sun ho preparato un interfaccia bruttissima e banalissima utilizzando le librerie swing, composta essenzialmente da 2 elementi degni di nota: un JButton (collegato ad un JFileChooser) e una JTextArea.

Avviando l'interfaccia grafica e cliccando sul pulsante, riesco a scegliere correttamente il File da processare. In seguito alla selezione istanzio un oggetto della mia classe (che si chiama PdfParser), setto il parametro richiesto "parser.setFile(file);" e faccio partire il fatidico "parser.run();".

Problema n.1: la gui rimane completamente grigia e "bloccata" mentre la classe PdfParser fa il suo lavoro.
Problema n.2: e' possibile "catturare" tutto cioe' che la classe "PdfParser" stampa sullo standard out e "ridirigerlo" all'interno della textarea presente sulla gui? E, se questo non fosse possibile, avete qualche consiglio su come strutturare la parte di output in modo che sia flessibile? Non voglio pensare che la classe PdfParser debba sapere che esiste una JTextArea nella quale scrivere il suo output...

Qualsiasi tipo di aiuto anche a livello logico (senza codice) e' apprezzato, purtroppo non ho mai lavorato con l'interfaccia grafica nativa di java.. grazie a chiunque vorra' darmi una mano

Qui di seguito c'e' un estratto del codice della gui, nel caso possa servire.
Codice PHP:
public class Gui extends JPanel implements ActionListener {

    static private final 
String newline "\n";
    
    private 
JButton processFileButton;
    private 
JFileChooser fileChooser;
    private 
JTextArea log;

//...

public void actionPerformed(ActionEvent e) {

        
//Handle process file button action.
        
if (e.getSource() == this.processFileButton) {
            
int returnVal this.fileChooser.showOpenDialog(Gui.this);
            if (
returnVal == JFileChooser.APPROVE_OPTION) {
                
File file this.fileChooser.getSelectedFile();
                
                
//qui dovrebbe partire il thread di elaborazione
                
PdfParser parser = new PdfParser();
                
parser.setFile(file);
                
parser.run();
                
                
                
this.log.append("Elaborazione file \"" file.getName() + "\" terminata." newline);
            } else {
                
this.log.append("Selezione file annullata." newline);
            }
            
this.log.setCaretPosition(this.log.getDocument().getLength());
        }
    }

//...