Avatar billede Bennysørensen Praktikant
10. november 2003 - 03:42 Der er 8 kommentarer og
1 løsning

Metodekald fra anden klasse...burde være nemt!

Jeg skal lave en logging-klasse som en del af en opgave. Nemt nok:

import java.io.*;

public class LoggingFacility
{
    static String logtekst;
    public void log( String s )
    {
        logtekst = s;
        try
          {
              BufferedWriter logWriter = new BufferedWriter(new FileWriter("E:/java..../log.txt"));
              logWriter.write(logtekst);
              //System.out.println("Skrives til log.txt: " + logtekst);
              logWriter.close();
            }
            catch (IOException e)
            {      }
    }
    public static void main(String args[])
    {
        LoggingFacility test = new LoggingFacility();
        test.log("irene");
    }
}

Dét virker fint. Nu er der så lige den finte ved opgaven, at "pointen med klassen er, at man fra andre klasser kan kalde fx
LoggingFacility.log("Har sendt meddelse...")
"

Når jeg laver en testklasse, og kalder som vanligt med andetObjekt.andenMetode(), synes jeg at det burde virke...klassen er her:

import java.io.*;

public class TestKlasse
{
    public TestKlasse()
    {
   
    }
    public static void main (String args [])
    {
        TestKlasse tk= new TestKlasse();
        tk.LoggingFacility.log("Irene igen");
    }
}

...men hvorfor gør det så ikke det?
Avatar billede Bennysørensen Praktikant
10. november 2003 - 03:48 #1
Nå, det løste sig selv, så dér er vist ikke noget at give points for alligevel.
Avatar billede jakoba Nybegynder
10. november 2003 - 04:05 #2
hils irene.
Avatar billede Bennysørensen Praktikant
10. november 2003 - 04:14 #3
Det HAR jeg gjort...hun bad mig om at hilse Jacob.
Avatar billede arne_v Ekspert
10. november 2003 - 06:43 #4
Nu er det jo en opgave, så du skal vel lave det som opgaven går ud på.

Men ellers er det logging faciliteter i Java 1.4 (og for ældre versioner
er der f.eks. log4j !).
Avatar billede Bennysørensen Praktikant
10. november 2003 - 13:33 #5
"...på samme måde skal en logging-facilitet bruges til at et program kan udskrive information om centrale ting det foretager sig. Nedenfor vises et klasseskelet over en klasse LoggingFacility:

public static Loggingfacility{

public static void log( String s )
{
//Se delopgave a
}

public static void setLogToConsole
{
//se delopgave b
}
public static void setLogToFile
{
//se delopgave b
}

}
a) meningen med programmet er, at man fra andre klasser kan kalde f.eks
LoggingFacility.log("har sendt objektet til Klienten");
...hvormed den angivne streng sendes ned i en logfil (kaldet log.tekst). Du kan indtil videre bare overskrive filen log.txt hvergang programmet køres på ny.
b) udvid nu programmet med de to metoder setLogToFile() og setLogToConsole, hvorvidt loggeren skal skrive de ting, der bliver loget, til en fil og/eller konsollen. "

Bortset fra at jeg kun har lavet en "til konsol ELLER fil", synes jeg at klasserne løser problemet ok...?:

import java.io.*;

public class LoggingFacility
{
    static String logtekst;
    static boolean printer;
    static boolean filskriver = false;
   
    public static void setLogToFile( boolean logToFile )
    {
        filskriver = logToFile;
    }
    public static void setLogToConsole( boolean logToConsole )
    {
        printer = logToConsole;
    }
    public static void log( String s )
    {
        logtekst = s;
        try
        {
            if (filskriver)
            {
                BufferedWriter logWriter = new BufferedWriter(new FileWriter("E:/java/sampledir/sampledir/legeplads/IO/log.txt"));
                System.out.println("Skrives til log.txt: " + logtekst);
                logWriter.write(logtekst);
                logWriter.close();
            }
            else
            {
                System.out.println("Skrives til konsol: " + logtekst);
            }
        }
        catch (IOException e)
        {  }
       
    }

    public static void main(String args[])
    {
        LoggingFacility test = new LoggingFacility();
        test.setLogToFile(true);
        test.setLogToConsole(false);
        test.log("irene 6");
    }
}


import java.io.*;

public class TestKlasse
{
    public TestKlasse()
    {
   
    }
    public static void main (String args [])
    {
        TestKlasse tk= new TestKlasse();
        LoggingFacility.setLogToFile(true);
        LoggingFacility.setLogToConsole(false);
        LoggingFacility.log("Irene 7");
    }
}

Venligst
Avatar billede arne_v Ekspert
10. november 2003 - 13:45 #6
OK kode.
Avatar billede arne_v Ekspert
10. november 2003 - 13:48 #7
Det som de store log framework tilbyder er:
  - begrænsning af output baseret på severity (debug, info, warning, error, fatal)
  - styring af både fil/console og serverity level per loggende klasse
  - dynamisk konfiguration via konfigurations fil

Men jeg har skam også lavet kode som din mange gange.
Avatar billede arne_v Ekspert
10. november 2003 - 13:50 #8
Hvis vi skal ned i det rent teknisk, så undrer det mig at du åbner
filen i log og ikke i constructor. SÅ kan du jo kun have en besked
fremfor en hel program kørsel.
Avatar billede Bennysørensen Praktikant
10. november 2003 - 13:53 #9
Æh, det kan du have ret i...mit faglige niveau i java parret med tiden til at løse opgaverne er beklageligvist kun lige til "Hvis det virker, kan jeg altid prøve at lave Den Smarte Metode" når opgaven ER afleveret indenfor tidsfristen."...derfor.

Der kommer forøvrigt nok et spørgsmål om fordele og ulemper ved at gemme filer som hhv .ser, .dat og . txt senere på dagen...dét gik jeg i stå i i nat.
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