tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Thomas Darimont
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
3036
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    UseTheSource UseTheSource ist offline Mitglied
    Registriert seit
    Aug 2005
    Beiträge
    17
    Hallo allerseits

    Ich arbeite an einem Applet, für das ich einige Einstellungen in eine XML-Datei speichere, die per JDOM verarbeitet wird. Der Pfad der Konfig-Datei wird per HTML-Parameter übergeben.
    Lokal (bzw. im Appletviewer von JBuilder) funktioniert das Laden und Speicher der Datei ganz gut. Sobald sich das ganze auf dem Server befindet, fangen aber die Probleme an. Als erstes habe ich versucht, die Datei im selben Verzeichnis wie das Applet-Jar anzulegen. Ein Problem dabei ist, das die VM den Pfad immer lokal interpretiert, also vom Desktop aus. Wenn ich den ganzen (SMB-)Netzwerkpfad angegeben habe, ging es teilweise, aber ansonsten meldet der SAXBuilder immer wieder Fehler beim Verbinden mit der Datei.
    Ein Kollege hat gemeint, ich soll die Konfig-Datei mit ins jar-Archiv packen, allerdings hab ich dort wiederum so meine Probleme gehabt (Wiederum hat es hier lokal sogar einmal funktioniert, auf dem Server allerdings wieder nicht mehr).
    Meine Frage wäre nun, welcher Weg wohl der bessere ist und wie der am besten umgesetzt werden könnte.

    Initialiserung der Config-Klasse:
    Code :
    1
    2
    
    Conf = new Config(this.getParameter(String.valueOf("Config_File")));
    //"Confi_File" wäre in dem Fall "config.xml"

    Einlesen der XML-Datei:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    public class Config {
      public Config(String filename) {
        FileName = filename;
        readConfig();
      }
     
      static private Document ConfigFile;
      static public String FileName;
      //...
     
      //XML-Dokument aus Datei lesen und Konfiguration auslesen
      public void readConfig() {
        try {
          ConfigFile = new SAXBuilder().build(FileName);
          QueryList = new Vector(0);
          Element config = ConfigFile.getRootElement();
          //----Allgemeine Einstellungen auslesen----
          //...
        } catch (JDOMException jd_e) {
          jd_e.printStackTrace();
        } 
      }
     
      //...
     
      public void saveConfig(String filename) {
        FileName = filename;
        saveConfig();
      }
     
      //XML-Dokument in Datei speichern
      public void saveConfig() {
        updConfigDoc();
        XMLOutputter out = new XMLOutputter("\t", true);
        try {
          File outFl = new File(FileName);
          outFl.createNewFile();
          FileWriter FlWr = new FileWriter(outFl);
          out.output(ConfigFile, FlWr);
          FlWr.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }

    Es würde mich wiklich freuen, wenn mir jemand helfen könnte, denn danach wär mein Applet so gut wie fertig und ich könnte mich endlich mal etwas Neuem widmen .
    Auf jeden Fall möchte ich mich schon mal im Voraus bei euch für die Hilfe bedanken.

    MfG UseTheSource
    Geändert von UseTheSource (31.08.05 um 17:41 Uhr)
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Lesen und Schreiben von Dateien auf der Festplatte des Benutzers ist nur für signierte Applets erlaubt. Wenn deine Anwendung Daten von der Festplatte des Benutzers lesen oder schreiben soll mußt du sie signieren.

    Hier ein beispiel, wie du deine Konfiguration aus einem jar heraus laden kannst:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
     package de.tutorials.applet;
     
     import javax.swing.JApplet;
     import javax.swing.JLabel;
     import javax.xml.parsers.SAXParserFactory;
     
     import org.xml.sax.Attributes;
     import org.xml.sax.SAXException;
     import org.xml.sax.helpers.DefaultHandler;
     
     public class AppletExample extends JApplet {
     
        String text;
     
        public void init() {
            try {
                SAXParserFactory.newInstance().newSAXParser().parse(
                        getClass().getResourceAsStream("config.xml"),
                        new DefaultHandler() {
                            
                            boolean isTextElement = false;
                            
                            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                                if(qName.equals("text")){
                                    isTextElement = true;
                                }
                            }
                            
                            public void characters(char[] ch, int start, int length)
                                    throws SAXException {
                                if(isTextElement){
                                    text = new String(ch,start,length);
                                    isTextElement = false;
                                }
                            }
                        });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        
        public void start() {
            add(new JLabel(text));
        }
     }

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
     <html>
        <head>
            <title>AppletTest</title>
        </head>
        <body>
            <applet archive="applet.jar" code="de.tutorials.applet.AppletExample"/>
        </body>
     </html>

    Gruß Tom
    Angehängte Dateien Angehängte Dateien
    greg121 bedankt sich. 
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    UseTheSource UseTheSource ist offline Mitglied
    Registriert seit
    Aug 2005
    Beiträge
    17
    Vielen Dank für die Antwort!

    Das Einlesen funktioniert jetzt endlich, aber fürs Speichern benötigt der XMLOutputter ja einen OutputStream, während getResourceAsStream() ja nur einen InputStream hergibt. Gibt es eine Möglichkeit die XML-Datei direkt wieder ins Archiv zu speichern oder muss ich sie vielleicht zurest irgendwo temporär abspeichern und dann ins Archiv packen?

    Für alle Interessierten, noch meine Anpassung (das Applet war übrigens schon signiert):
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
      //Constructor
      public Config(String resName) {
        ResName = resName;
        readConfig();
      }
     
      //XML-Dokument aus Datei lesen und Konfiguration auslesen
      public void readConfig() {
        try {
          ConfigFile = new SAXBuilder().build(getClass().getResourceAsStream(ResName));
          QueryList = new Vector(0);
          Element config = ConfigFile.getRootElement();
          //----Allgemeine Einstellungen auslesen----
          //...
        } catch (JDOMException jd_e) {
          jd_e.printStackTrace();
        } 
      }

    MfG UseTheSource
    Geändert von UseTheSource (01.09.05 um 10:40 Uhr)
     

  4. #4
    UseTheSource UseTheSource ist offline Mitglied
    Registriert seit
    Aug 2005
    Beiträge
    17
    Naja, das Schreiben ins Jar-Archiv habe ich mal für's Erste auf Eis gelegt. Ich lege jetzt die Konfigurations-Datei im Anwedungsdaten-Verzeichnis des Benutzers an und lese sie nur aus dem Archiv, wenn sie lokal noch nicht vorhanden ist, also sozusagen als Vorlage. Das hat den (eigentlich ganz nützlichen) Nebeneffekt, dass nun die Konfiguration benutzerspezifisch gespeichert wird.

    Also, nochmals herzlichen Dank für die Hilfe!
    MfG UseTheSource
     

    (o_
    //\-~_/ May the Source be with you!
    V_/_



Ähnliche Themen

  1. Frage zu Manifest Datei für Jar-archiv
    Von voodinator im Forum Java
    Antworten: 4
    Letzter Beitrag: 02.09.10, 12:19
  2. jar-Datei in ein jar-Archiv einfügen
    Von deni74 im Forum Java
    Antworten: 3
    Letzter Beitrag: 04.12.07, 16:49
  3. Antworten: 1
    Letzter Beitrag: 15.08.05, 15:52
  4. [batch] Archiv in Datei mit Name von Haute
    Von dino4k im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 22.03.05, 22:47
  5. zugriff auf datei im zip-archiv
    Von thecooper im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 02.08.03, 00:03