Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    25

    JAVA creazione Document e file XML

    Salve ragazzi, ho un nuovo problema: dovrei creare un file XML a partire da alcuni dati inseriti run-time da una finestra.
    Dispongo delle classi per scrivere il file XML a partire da un Document, ma ho dei problemi proprio con la creazione del document, problemi che si verificano non al momento della compilazione ma dopo l'inserimento dei dati nella finestra. Ecco il codice :
    P.S. La creazione e il riempimento del Document sono gestite all'interno dell'actionPerformed di un bottone



    public void actionPerformed(ActionEvent actionEvent)
    {
    //ottengo le stringhe da un JComboBox e da dueTextField

    String radice = (String)Menu.getSelectedItem();
    String figlio1 = Cognome.getText();
    String figlio2 = Matricola.getText();

    //creo il document vuoto
    try
    {
    DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
    factory.setValidating(false);
    Document doc = factory.newDocumentBuilder().newDocument();
    }

    catch (Exception e)
    {
    System.out.println("Errore!!");
    }



    //riempio il document

    Element root = doc.createElement(radice);
    doc.appendChild(root);
    Element child1 = doc.createElement (figlio1);
    Element child2 = doc.createElement (figlio2);

    }

    Gli errori che mi dà run time dopo la pressione del button sono:

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Finestra.actionPerformed(Finestra.java:120)
    at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1849)
    at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2169)
    at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:420)
    at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:258)
    at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:234)
    at java.awt.Component.processMouseEvent(Component.jav a:5488)
    at javax.swing.JComponent.processMouseEvent(JComponen t.java:3126)
    at java.awt.Component.processEvent(Component.java:525 3)
    at java.awt.Container.processEvent(Container.java:196 6)
    at java.awt.Component.dispatchEventImpl(Component.jav a:3955)
    at java.awt.Container.dispatchEventImpl(Container.jav a:2024)
    at java.awt.Component.dispatchEvent(Component.java:38 03)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:3892)
    at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.jav a:2010)
    at java.awt.Window.dispatchEventImpl(Window.java:1774 )
    at java.awt.Component.dispatchEvent(Component.java:38 03)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java: 463)
    at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:110)

    Grazie.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se devi utilizzare l'oggetto Document in più parti del codice (dentro a metodi diversi), allora lo devi dichiarare a livello di classe e non dentro ad un metodo (tantomeno dentro ad un blocco try/catch).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    25
    Ciao LeleFT, ti ringrazio per la prontezza e la disponibilità...
    doc l'ho dichiarato all'interno della classe principale, buildo il tutto e nessun problema ma al momento dell'esecuzione, quando presso il JButton, i nodi vengono al pettine!!! :-) Sono alle prime armi con Java quindi ho mille dubbi, ho pensato forse che le linee di codice all'interno dell'actionPerformed non si possono usare e ho provato a usare metodi esterni che facessero la stessa cosa richiamandoli da lì,ma niente...penso che la cosa migliore è se ti mando tutto il codice...a tuo buon cuore e alla tua pazienza affido una risposta ai miei problemi... :-)


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;
    import java.io.*;
    import java.sql.*;
    import java.net.*;
    import java.text.*;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import java.lang.*;

    //La classe finestra ha un costruttore che crea due JTextField e un JComboBox e un JButton. Alla pressione del bottone quello che dovrebbe succedere è che i dati immessi dall'utente siano passati a stringa e inseriti in un Document dal quale (attraverso una classse che ho già ma che ancora non ho usato) dovrei ottenere un file Xml




    public class Finestra extends JFrame implements ActionListener
    {
    private JTextField Cognome,Matricola;
    private JButton Salva;
    private JComboBox Menu;
    private String[] Scelta;
    private Document doc;

    /** Creates a new instance of Finestra */
    public Finestra(String titolo ){
    super(titolo);
    setSize(new Dimension(400, 500));
    setLocation(100,100);

    JLabel label_cognome = new JLabel("Cognome");
    Cognome = new JTextField(15);

    JLabel label_matr = new JLabel("Matricola");
    Matricola = new JTextField(15);

    JLabel label_menu = new JLabel("Corso");
    Scelta = new String[2];
    Scelta[0]= "Ingegneria informatica";
    Scelta[1]= "Scienze della comunicazione";
    Menu = new JComboBox(Scelta);

    JLabel label_salva = new JLabel("Clicca x salvare in XML");
    Salva = new JButton("Salva i dati in XML");
    Salva.addActionListener(this);

    JPanel pannello_inserimento1 = new JPanel();
    pannello_inserimento1.add(label_cognome);
    pannello_inserimento1.add(Cognome);

    JPanel pannello_inserimento2 = new JPanel();
    pannello_inserimento2.add(label_matr);
    pannello_inserimento2.add(Matricola);

    JPanel pannello_inserimento3 = new JPanel();
    pannello_inserimento3.add(label_menu);
    pannello_inserimento3.add(Menu);

    JPanel bottone = new JPanel();
    bottone.add(label_salva);
    bottone.add(Salva);

    Container c = this.getContentPane();
    c.setLayout(new GridLayout(2,3));
    c.add(pannello_inserimento1);
    c.add(pannello_inserimento2);
    c.add(pannello_inserimento3);
    c.add(bottone);

    }/**
    * @param args the command line arguments
    */

    public static void main(String[] args) {

    Finestra f= new Finestra("Modulo_immissione_dati");
    f.show();
    }







    public void actionPerformed(ActionEvent actionEvent)
    {
    String radice = (String)Menu.getSelectedItem();
    String figlio1 = Cognome.getText();
    String figlio2 = Matricola.getText();


    try
    {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBu ilder();
    doc = builder.newDocument();
    }

    catch (Exception e)
    {
    System.out.println("Errore!!");
    }

    Element root = doc.createElement(radice);
    doc.appendChild(root);
    Element child1 = doc.createElement (figlio1);
    Element child2 = doc.createElement (figlio2);



    }
    }


    Questi sono i messaggi di errore che mi genera una volta premuto il JButton:

    Exception in thread "AWT-EventQueue-0" org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified.
    at com.sun.org.apache.xerces.internal.dom.CoreDocumen tImpl.createElement(CoreDocumentImpl.java:626)
    at progetto.Finestra.actionPerformed(Finestra.java:11 9)
    at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1849)
    at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2169)
    at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:420)
    at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:258)
    at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:234)
    at java.awt.Component.processMouseEvent(Component.jav a:5488)
    at javax.swing.JComponent.processMouseEvent(JComponen t.java:3126)
    at java.awt.Component.processEvent(Component.java:525 3)
    at java.awt.Container.processEvent(Container.java:196 6)
    at java.awt.Component.dispatchEventImpl(Component.jav a:3955)
    at java.awt.Container.dispatchEventImpl(Container.jav a:2024)
    at java.awt.Component.dispatchEvent(Component.java:38 03)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:3892)
    at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.jav a:2010)
    at java.awt.Window.dispatchEventImpl(Window.java:1774 )
    at java.awt.Component.dispatchEvent(Component.java:38 03)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java: 463)
    at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:110)

    Ti ringrazio ancora, se non riceverò risposta non ti preoccupare perchè capisco che forse ti sto richiedendo uno sforzo eccessivo...Ciao

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    L'errore che ti compare indica che nel file XML ci sono dei caratteri non validi. Non è un errore di codice Java (a meno che tu non vada a modificare l'XML in modo errato tramite Java), ma del file XML che usi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.