2009-08-07 55 views
1

我写了这个代码显示的HTML文件,这是我从我的电脑选择了它,当我选择HTML文件在我的电脑一样的faq.html此错误消息将显示:为什么此代码不显示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

您是否收到错误消息? – 2009-08-07 03:57:08

回答

3

你需要使用文件协议,这样指定文件的完整路径:

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

您可以使用file.toURI()得到一个URI,然后uri.toURL()获得一个网址:

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

那么它将是字符串! – Johanna 2009-08-07 04:17:24

+0

那么?您可以将URL作为字符串传递给'JEditorPane.setPage()',没有任何问题:http://java.sun.com/javase/6/docs/api/javax/swing/JEditorPane.html#setPage%28java。 lang.String%29 – 2009-08-07 04:20:31

+2

尝试之前说一个答案不起作用。 – 2009-08-07 04:23:49

0

也许尝试pane.setPage(file.toURL()),而不是pane.setPage(file.getName()),因为setPage需要一个URL,从快速搜索其他人试图让它工作,没有自己尝试过。