为什么JEditorPane的read(InputStream,object)总是抛出NullPointException.怎么样才能从InputStream中加载HTML页面呢?

解决方案 »

  1.   

    把代码贴出来。这样怎么知道必须从IS里加载吗?用setPage不可以吗
      

  2.   

    动态库实现的InputStreamprivate class View extends JEditorPane
    {
    public View()
    {
    setEditable(false);
    setEditorKit(getEditorKitForContentType("text/html"));
    }
     public Set(String strURL)
    {
     InputStream is = CreateInputStream(strURL); // 动态库实现的stream,测试没问题
     read(is,getEditorKit().createDefaultDocument()); // 异常
    }
    }
      

  3.   

    JEditorPane p=new JEditorPane();
        JFrame f=new JFrame();
        f.getContentPane().add(p,BorderLayout.CENTER);
        URL url=new URL("http://www.sina.com.cn");
        p.setEditorKit(p.getEditorKitForContentType("text/html"));
        p.read(url.openStream(),p.getEditorKit().createDefaultDocument());
        f.show();
    没问题我想你的问题在CreateInputStream方法,看看传入的string是不是个url格式.为什么不用URL的openStream呢?
      

  4.   

    使用URL是可以的,但数据在数据库中,不存在真实的地址,由动态库进行重组,解压,解密后生成的数据流。
      

  5.   

    /**
       @version 1.02 2004-08-22
       @author Cay Horstmann
    */import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.*;/**
       This program demonstrates how to display HTML documents
       in an editor pane.
    */
    public class EditorPaneTest
    {
       public static void main(String[] args)
       {
          JFrame frame = new EditorPaneFrame();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setVisible(true);
       }
    }/**
       This frame contains an editor pane, a text field and button
       to enter a URL and load a document, and a Back button to
       return to a previously loaded document.
    */
    class EditorPaneFrame extends JFrame
    {
       public EditorPaneFrame()
       {
          setTitle("EditorPaneTest");
          setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);      final Stack<String> urlStack = new Stack<String>();
          final JEditorPane editorPane = new JEditorPane();
          final JTextField url = new JTextField(30);      // set up hyperlink listener      editorPane.setEditable(false);
          editorPane.addHyperlinkListener(new
             HyperlinkListener()
             {
                public void hyperlinkUpdate(HyperlinkEvent event)
                {
                   if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
                   {
                      try
                      {
                         // remember URL for back button
                         urlStack.push(event.getURL().toString());
                         // show URL in text field
                         url.setText(event.getURL().toString());
                         editorPane.setPage(event.getURL());
                      }
                      catch (IOException e)
                      {
                         editorPane.setText("Exception: " + e);
                      }
                   }
                }
             });      // set up checkbox for toggling edit mode      final JCheckBox editable = new JCheckBox();
          editable.addActionListener(new
             ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   editorPane.setEditable(editable.isSelected());
                }
             });      // set up load button for loading URL      ActionListener listener = new
             ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   try
                   {
                      // remember URL for back button
                      urlStack.push(url.getText());
                      editorPane.setPage(url.getText());
                   }
                   catch (IOException e)
                   {
                      editorPane.setText("Exception: " + e);
                   }
                }
             };      JButton loadButton = new JButton("Load");
          loadButton.addActionListener(listener);
          url.addActionListener(listener);      // set up back button and button action      JButton backButton = new JButton("Back");
          backButton.addActionListener(new
             ActionListener()
             {
                public void actionPerformed(ActionEvent event)
                {
                   if (urlStack.size() <= 1) return;
                   try
                   {
                      // get URL from back button
                      urlStack.pop();
                      // show URL in text field
                      String urlString = urlStack.peek();
                      url.setText(urlString);
                      editorPane.setPage(urlString);
                   }
                   catch (IOException e)
                   {
                      editorPane.setText("Exception: " + e);
                   }
                }
             });      add(new JScrollPane(editorPane), BorderLayout.CENTER);      // put all control components in a panel      JPanel panel = new JPanel();
          panel.add(new JLabel("URL"));
          panel.add(url);
          panel.add(loadButton);
          panel.add(backButton);
          panel.add(new JLabel("Editable"));
          panel.add(editable);      add(panel, BorderLayout.SOUTH);
       }   private static final int DEFAULT_WIDTH = 600;
       private static final int DEFAULT_HEIGHT = 400;
    }
      

  6.   

    找问题是比较烦我还是觉得InputStream is = CreateInputStream(strURL); 有问题。你可以把后面的代码改一下,通过这个is来读取String,然后把String打印出来,看看有没有问题。其实CreateInputStream(strURL); 和URL.openStream()一样的,你也可以通过openStream对流作任何操作,甚至包括加密解密