Avatar billede jimmi1311 Nybegynder
20. september 2006 - 09:16 Der er 4 kommentarer og
1 løsning

Override System.out.println

Hej Arne og alle i andre

Jeg kunne godt tænke mig at override metoden System.out.println(), så den udskriver til en fil samtidig med at den udskriver til consolen.

Hvordan er det lige at jeg overriden sådan en metode??

MVH
Jimmi
Avatar billede jakoba Nybegynder
20. september 2006 - 12:07 #1
Det er ret simpelt men lidt arbejdsomt.

Lav en klasse der hedder System og læg den i sammen med dine programfiler. I den klasse genskaber du så alle de metoder du bruger fra System i dit program. Det akkermeste skal bare omdirigeres til den rigtige System klasse, de gør du ved at angive dens fulde adresse.
eg:

class System {

  <jeg husker ikke typen> in = java.System.in;
            // det klarer alle de steder du læser noget.

  DinOut out = New DinOut():  // se nedenfor

} //endclass System

class DinOut {
    void println( .... )  // her definerer du din egen println funktion + evt
                              // andre funktioner

    void print( ... ) {  // redirect de alle funktioner du bruger, men ikke
                              // vil have en speciel version af
        java.System.out.print( ... );  // sender parametrene videre til 'den rigtige'
    }
} //endclass DinOut

Du behøver ikke definere andre funktioner end dem du selv bruger

mvh JakobA
Avatar billede arne_v Ekspert
20. september 2006 - 13:43 #2
et lidt andet approach:

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

public class CaptureOutput {
    public static void main(String[] args) {
        try {
            PrintStream save = System.out;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PrintStream pw = new PrintStream(baos);
            System.setOut(pw);
            T t = new T();
            t.start();
            t.join();
            System.setOut(save);
            pw.flush();
            System.out.println("from thread: " + baos.toString());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class T extends Thread {
    public void run() {
        System.out.println("Hello world");
    }
}

hvor pointen er at baos.toString kan udskrives både til skærm og til fil
Avatar billede simonvalter Praktikant
20. september 2006 - 18:23 #3
en anden mulighed var at bruge et logging framework som f.eks log4j og have flere appenders.
Avatar billede jimmi1311 Nybegynder
21. september 2006 - 07:39 #4
Takker. Jeg tror jeg holder mig til Jackob's løsning. Smid et svar
Avatar billede jakoba Nybegynder
21. september 2006 - 09:20 #5
tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester