2009-08-07 10 views
1

j'ai écrit ce code pour montrer le fichier HTML, que je l'ai choisi de mon ordinateur et quand je choisis le fichier HTML dans mon ordinateur comme FAQ.html ces messages d'erreur seront affichés:Pourquoi ce code n'affiche pas le fichier HTML?

java.net.MalformedURLException: no protocol: FAQ.html 
at java.net.URL.<init>(Unknown Source) 
at java.net.URL.<init>(Unknown Source) 
at java.net.URL.<init>(Unknown Source) 
at javax.swing.JEditorPane.setPage(Unknown Source) 
at org.bihe.com1112.FileViewer.actionPerformed(FileViewer.java:86) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 





public class FileViewer extends JPanel implements ActionListener { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

JFileChooser chooser; 

FileNameExtensionFilter filter = null; 

JTextField text; 

JButton button; 

FileInputStream in; 

JEditorPane pane; 

public FileViewer(JEditorPane pane) { 
    this.pane = pane; 
    setLayout(new FlowLayout(FlowLayout.RIGHT)); 
    text = new JTextField("file...", 31); 
    text.setColumns(45); 
    text.revalidate(); 
    text.setEditable(true); 

    button = new JButton("Browse"); 
    add(text); 
    add(button); 
    filter = new FileNameExtensionFilter("html", "html"); 
    chooser = new JFileChooser(); 
    chooser.addChoosableFileFilter(filter); 

    button.addActionListener(this); 

} 

public void paintComponent(Graphics g) { 
    super.paintComponents(g); 
    Graphics2D graphic = (Graphics2D) g; 
    graphic.drawString("HTML File:", 10, 20); 

} 

public void actionPerformed(ActionEvent event) { 
    int returnVal = 0; 
    if (event.getSource() == button) { 
     returnVal = chooser.showOpenDialog(FileViewer.this); 
     if (returnVal == JFileChooser.APPROVE_OPTION) { 
      File file = chooser.getSelectedFile(); 
      text.setText(file.getName()); 
      if (file != null) { 
       try { 
        pane.setPage(file.getName()); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } else 

       System.err.println("Couldn't find this HTML file:" 
         + file.getName()); 

     } else 
      System.exit(0); 
    } 

    } 
} 
+0

Un message d'erreur s'affiche-t-il? –

Répondre

3

Vous besoin de spécifier le chemin complet du fichier en utilisant le protocole de fichier en tant que tel:

file:///c:/somefolder/FAQ.html 

Vous pouvez utiliser file.toURI() pour obtenir un URI, puis uri.toURL() pour obtenir une URL:

// file.toURL() has been deprecated, use file.toURI().toURL() instead 
pane.setPage(file.toURI().toURL()); 
+0

alors ce sera la chaîne !!! – Johanna

+0

Alors? Vous pouvez passer une URL en tant que chaîne à 'JEditorPane.setPage()' sans aucun problème: http://java.sun.com/javase/6/docs/api/javax/swing/JEditorPane.html#setPage%28java. lang.String% 29 –

+2

Essayez avant de dire qu'une réponse ne fonctionne pas. –

0

Peut-être essayer pane.setPage (file.toURL()) au lieu de pane.setPage (file.getName()), car setPage attend une URL, à en juger par une recherche rapide pour les autres essayant de le faire fonctionner, n'ayant pas essayé moi-même.

Questions connexes