Avatar billede grave Nybegynder
19. juli 2001 - 13:51 Der er 10 kommentarer og
1 løsning

Printwriter ArrayList

Jeg har et program der kører en socket conn.

problemet er at clienten kan logge ind og sætte et program i gang og får outputtet derfra printet ud på skærmen, men logger han af skal dette output gæmmes i en ArrayList og logger han så på igen vil han få printet hele denne ArrayList ud på skærmen...
altså..jeg vil gerne have at når mine klasser kalder min PrintWriter: out.println at jeg så får outputtet lagt i en ArrayList.
Avatar billede delbing Nybegynder
19. juli 2001 - 13:58 #1
fx sådan:

public class MyWriter extends PrintWriter {

private ArrayList a;

public void println(String s) {
  a.add(s);
  super.println(s);
}
}

Avatar billede delbing Nybegynder
19. juli 2001 - 14:04 #2
der bør selvfølgelig tilføjes set (og måske get) metoder til ArrayListen og lidt exception handling hvis den er null, osv. men ideen skulle være der.
Hvis du får PrintWriteren fra et bestemt sted bliver du nok nød til at lave en wrapper:

public class MyWriter implements PrintWriter {

private PrintWriter writer;

public MyWriter(PrintWriter w) {
  writer = w;
}

// dette skal gøres for alle metoder i PrintWriter :(
public void println(String s) {
  // gem s
  writer.println(s);
}
}
Avatar billede grave Nybegynder
19. juli 2001 - 14:15 #3
jeg har en metode der hedder getWriter der returnerer min writer og den skulle gerne stadig returnere en printwriter da alle mine variabler er sat som PrintWriter

jeg har eks en:
PrintWriter out = IO.getWriter();
det er denne out der skal printe til ArrayListen.

kan jeg stadig returnere min MyWriter som en PrintWriter når den er nedarvet ?
Avatar billede delbing Nybegynder
19. juli 2001 - 14:19 #4
Ja, en klasse kan bruges alle steder hvor dens superklasse kan.
Avatar billede delbing Nybegynder
19. juli 2001 - 14:20 #5
En MyWriter er en PrintWriter, ligesom en hund er et dyr.
Avatar billede grave Nybegynder
19. juli 2001 - 14:23 #6
Hvorfor får jeg denne error når jeg compilerer ????

cannot resolve symbol
symbol  : constructor PrintWriter  ()
location: class java.io.PrintWriter
public class Buffer extends PrintWriter {
Avatar billede delbing Nybegynder
19. juli 2001 - 14:27 #7
fordi du ikke kan have en constructor der hedder PrintWriter i en klasse der hedder Buffer tror jeg. Ellers prøv at hvis koden her.
Avatar billede grave Nybegynder
19. juli 2001 - 14:30 #8
det eneste der er:
public class Buffer extends PrintWriter {
        private ArrayList a;

        public void println(String s) {
                a.add(s);
        }
}
Avatar billede delbing Nybegynder
19. juli 2001 - 14:42 #9
Når du extender en klasse arver du ikke constructorerne fra superklassen. Den tilføjer automatisk den tomme constructor svarende til:

Buffer() {
super();
}

Men sådan en constructor har PrintWriter ikke. Du bliver nød til at explicit lave constructorer i Buffer som den jeg lige skrev her, bare med passende parametre i.

Forresten mangler du at kalde super.println(s) ovenover hvis s skal skrives ud.
Avatar billede delbing Nybegynder
19. juli 2001 - 14:44 #10
altså tilføj fx

Buffer(OutputStream out) {
super(out);
}

og/eller de constructorer du bruger. Den tomme constructor oprettes kun automatisk hvis der ikke angives andre constructorer
Avatar billede logical Nybegynder
19. juli 2001 - 17:39 #11
Hvis det er ok med dig, kan du evt. gemme data i en StringWriter, f.eks.

StringWriter sr = new StringWriter();
PrintWriter out = new PrintWriter(sr);
..
out.println(\"whatever\");
..

ArrayList getContent() {
  ArrayList result = new ArrayList();
  BufferedReader br = new BufferedReader(new StringReader(sr.toString());
  for (String line = br.readLine(); line != null ; line = br.readLine())
    result.add(line);
  return result;
}
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