2016-05-11 7 views
0

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

В другой программе, которую я создал, пользователь смог создать текстовый файл с фиксированным форматом, известный как .ACH. Для этой программы пользователь мог открыть файл в блокноте, используя следующий код:

public void displayFileOptionEdited(){ 



      int dialogResult = JOptionPane.showConfirmDialog(null, "Output file saved as "+Rewriter.location+ "\nWould you like to view the file?","Display Output",JOptionPane.YES_NO_OPTION); 

      if(dialogResult==JOptionPane.YES_OPTION){ 

       ProcessBuilder pb = new ProcessBuilder("Notepad.exe", Rewriter.location); 
       try { 
        pb.start(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 



     } 

    } 

Проблема с моей текущей программе, что файл XML просто тарабарщина при просмотре в блокноте. Единственный способ просмотра этого файла - открыть его в IE. (Это я знаю). Я действительно пробовал одно решение о создании JDialog, чтобы посмотреть файл, как это:

package view; 

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.Font; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.border.EmptyBorder; 
import javax.swing.JTextPane; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class XMLview extends JDialog { 

    private final JPanel contentPanel = new JPanel(); 
    /** 
    * Create the dialog. 
    */ 
    public XMLview(File file) { 
     setBounds(100, 100, 555, 434); 
     this.setTitle("XML Viewer"); 
     getContentPane().setLayout(new BorderLayout()); 
     contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     getContentPane().add(contentPanel, BorderLayout.CENTER); 
     contentPanel.setLayout(new BorderLayout(0, 0)); 
     { 
      JTextPane textPane = new JTextPane(); 
      JScrollPane jsp = new JScrollPane(textPane); 
      Font font = new Font(Font.SANS_SERIF, 3,15); 
      textPane.setFont(font); 
      contentPanel.add(jsp); 
      try { 
        textPane.read(new FileReader(file), null); 
      } catch (IOException ex) { 
        System.out.println("problem accessing file"+file.getAbsolutePath()); 
      } 
     } 
     { 
      JPanel buttonPane = new JPanel(); 
      buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); 
      getContentPane().add(buttonPane, BorderLayout.SOUTH); 
      { 
       JButton okButton = new JButton("OK"); 
       okButton.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         dispose(); 
        } 
       }); 
       okButton.setActionCommand("OK"); 
       buttonPane.add(okButton); 
       getRootPane().setDefaultButton(okButton); 
      } 
     } 
    } 

} 

Проблема с этим решением является то, что в то время как XML генерируется в JDialog он не сохраняет правильное форматирование. Вместо того, чтобы занимать пару сотен строк или около того, он вытаскивается на 3 строки. В XML есть более 60 тегов, поэтому проблема может быть проблемой - мне не очень нравится этот подход, поскольку я думаю, что это будет серьезная головная боль, чтобы понять.

Итак, мое окончательное решение - просто открыть файл в IE, когда произойдет какое-то действие. Итак, мы вернемся к моему предыдущему примеру открытия файла с помощью блокнота. Я понимаю, что вы не можете сделать это с помощью IE, потому что это не «системная» утилита, как блокнот. Вы бы (я предполагаю) должны дать прямой путь, который трудно с несколькими пользователями.

Вот что: пользователи этой программы запускают одну и ту же систему и имеют одинаковый формат файлов для своего ПК. Единственное отличие - это имя пользователя для своего каталога пользователей. Поэтому мне интересно, можно ли сообщить программе открыть файл в IE и как я буду делать это, чтобы он мог применяться ко всем пользователям даже с разными именами пользователей? Если кто-то знает, каким образом я бы очень хотел услышать это.

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

Чтобы подвести итог, если есть какая-то путаница - я просто хочу, чтобы пользователь мог нажать кнопку и программу, чтобы автоматически открыть файл в IE.

+0

Я считаю, что вы можете ссылаться на IE, с 'новой ProcessBuilder ("старт", "Iexplore", Rewriter.location) .start()', где 'Rewriter.location 'содержит путь к вашему XML-файлу. –

+0

На самом деле, 'new ProcessBuilder (« cmd »,«/C start iexplore your.xml »). Start();' –

ответ

0

Использование Desktop системной интеграции.

Desktop.getDesktop().browse(new URI("file:/... .xml")); 

или open(new File("... .xml")).

IE зарегистрирован для файлов XML, поэтому это может быть кратчайший путь.

+0

дает мне ошибку: java.net.URISyntaxException: недопустимый символ в непрозрачной части с индексом 2: C: \ Users \ jhamric \ Documents \ camt54CLEARED2016-05-11-10-17-42.xml \t I попытались использовать блоки «Catch». – jesric1029

+0

Пренебрежение. Второй вариант работал отлично, просмотр не сделал. Спасибо за Ваш ответ. – jesric1029

+0

Используйте 'файл:/C:/Users/...' или 'файл:/C |/Users/...' или более простой, пользователь 'open (новый файл ...' - пробелы и т. Д. - Хорошо читайте второй комментарий, спасибо –

0

вы пробовали это:

JTextPane textPane = new JTextPane(); 
textPane.putClientProperty(JTextPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE); 

Если вы хотите diplaying содержание Html в JTextPane, то вы должны установить для JTextPane # SetContentType ("текст/html");

+0

Ну, я просто сделал .. Это имело действительно странный эффект. На самом деле они помещают теги внутри ящиков - я понятия не имею, почему это произошло. – jesric1029

1

Я бы рекомендовал использовать что-то другое, чем рабочий стол. В зависимости от IE это не идеальное решение.

Я рекомендую реализовать XMLEditorKit.

Очень прост в применении.

Вы можете найти здесь все: http://java-sl.com/xml_editor_kit.html

+0

Спасибо, что поделились этим со мной. Вся программа написана с использованием Dom Parser с построением узлов. Другая программа, созданная кем-то другим, использовала JDialog, но она все еще была не очень организованной и трудно читаемой. похоже, что это может быть очень ценно, и мне, возможно, придется увидеть его использование (я должен получить одобренную внешнюю загрузку), но спасибо, что поделились со мной, очень круто! – jesric1029

Смежные вопросы