Диалоговое окно Java, позволяющее использовать для выбора файла - PullRequest
1 голос
/ 26 июля 2010

Это код, который у меня есть на данный момент:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XMLReader extends JFrame
{
   JFileChooser _fileChooser = new JFileChooser();
   JPanel content = new JPanel();

       //... Create menu elements (menubar, menu, menu item)
       JMenuBar menubar  = new JMenuBar();
       JMenu    fileMenu = new JMenu("File");
       JMenuItem openItem = new JMenuItem("Open...");
       int retval = _fileChooser.showOpenDialog(XMLReader.this);
            //... The user selected a file, get it, use it.
     public static void main(String argv[]) 
     {
         ArrayList timeStamp = new ArrayList();
         ArrayList Y = new ArrayList();
         File file = XMLReader.this;
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         DocumentBuilder db = dbf.newDocumentBuilder();
         Document doc = db.parse(file);
         doc.getDocumentElement().normalize();
         System.out.println("Root element " + doc.getDocumentElement().getNodeName());
         NodeList nodeLst = doc.getElementsByTagName("reading");
         System.out.println("Share Data");

         for (int s = 0; s < nodeLst.getLength(); s++) {

         Node fstNode = nodeLst.item(s);

         if (fstNode.getNodeType() == Node.ELEMENT_NODE) {

          Element fstElmnt = (Element) fstNode;
          NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("timeStamp");
         .
         .
         .
   }

Я пытаюсь получить диалоговое окно, позволяющее пользователю выбирать XML-файл, который он хочет проанализировать. Я знаю, что синтаксический анализ работает, так как я жестко закодировал в файле ранее.

Я также хотел бы вернуть ArrayLists, чтобы я мог использовать их в качестве входных данных для другого класса, возможно ли это (в данный момент я только печатаю их на экране)?

System.out.println(timeStamp);
System.out.println(Y);

Могу ли я использовать оператор return и, если да, то как настроить класс, в котором я хочу их использовать?

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Диалоговое окно служит для извлечения пути

Я вижу, что вы используете awt и dom так:

public Document loadXmlFile(Frame frame, DocumentBuilder docBuilder, String startPath) {

    FileDialog fd = new FileDialog(frame, "Loadxml-title", FileDialog.LOAD);
     //Add type filter 
     fd.setDirectory(startPath));     
     fd.show();

    String file = fd.getFile();

    if(file == null) {
      return null;
    } 

    return  docBuilder.parse(file);

}
0 голосов
/ 26 июля 2010

Q2: «Сообщение об ошибке при компиляции, не может иметь DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance (); с исключением throw или catch.»

Эта ошибка возникает в компиляторе, потому что у вас нет блока try & catch в методе main.

Определение DocumentBuilderFactory. newInstace (); говорит, что этот метод вызывает FactoryConfigurationError. В Java, когда метод выдает какую-то ошибку, и это не исключение RuntimeException, вы должны выбросить его в определение метода или добавить блок try catch для его обработки.

 DocumentBuilderFactory dbf = null;

 try {
  dbf = DocumentBuilderFactory.newInstance();
 } Exception(FactoryConfigurationError e){
    e.printStackTrace();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...