import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;public class AreaTest extends JFrame
{
public static AreaTest f = null;
public JTextArea ta = null;

public AreaTest()
{
ta = new JTextArea();
        
JScrollPane scrollPane = new JScrollPane(ta);
scrollPane.setPreferredSize(new Dimension(200,400));

JPanel bp = new JPanel();

JButton b = new JButton("开始");
b.setPreferredSize(new Dimension(60,25));
bp.add(b);
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
PageReader pr = new PageReader(ta);
}
});
add(scrollPane,BorderLayout.CENTER);
add(bp,BorderLayout.SOUTH);
}

public static void main(String args[])
{
f = new AreaTest();
f.setTitle("AreaTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(200, 400);
f.setResizable(false);
f.setVisible(true);
}
}
import java.io.IOException;
import java.io.InputStream;import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;public class PageReader
{
public AreaTest f = null; private String charset = "utf-8";

private String urlString = "http://www.baidu.com/";

private StringBuffer HtmlContent = new StringBuffer();

public PageReader(AreaTest f)
{
this.f = f;
this.startRead();
}

private void startRead()
{
try
{
URL url = new URL(urlString);
URLConnection connection = url.openConnection();

InputStream is = connection.getInputStream();
Scanner in = new Scanner(is, this.charset);
while(in.hasNextLine())
{
f.ta.append(in.nextLine()+"\r\n");
}
in.close();
is.close();
//System.out.println(HtmlContent);
}catch(IOException e)
{
e.printStackTrace();
}
}
}
这个是测试来着,搞了很久没搞好怎么把读取的网页内容一行行实时显示在textArea里
我看网上有说要把费时代码加到另一个线程,但是研究了很久没搞出来
哪位达人做过,教教小弟,谢谢了

解决方案 »

  1.   

    就像Eclipse的控制台显示运行信息一样
    该怎么实现
      

  2.   

    OK,已解决 public void actionPerformed(ActionEvent arg0)

    new Thread(new Runnable()
    {
    public void run()
    {
    PageReader pr = new PageReader(ta);
    }
    }).start();
    }
      

  3.   

    首先楼主代码贴错了吧! b.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    PageReader pr = new PageReader(ta);//ta应该改为f
                }
            });
    然后加上这个进程后效果还不是很明显,可以再加一句代码:            while(in.hasNextLine())
                {
                    f.ta.append(in.nextLine()+"\r\n");
                    Thread.currentThread().sleep(87);//让当前的进程(即点击按钮创建的进程)睡眠若干秒,当然要捕获InterruptedException异常
                }仅供参考!
      

  4.   

    在你的代码中加一行代码就以实现哦!!
    在PageReader.java中f.ta.append(in.nextLine()+"\r\n");一行后面加上下面一行代码就可以的
    f.paintAll(f.getGraphics());小弟出道不到一年,请大家多关照哦!!!AreaTest.java
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.*;
    public class AreaTest extends JFrame
    {
        /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public static AreaTest f = null;
        public JTextArea ta = null;
        
        public AreaTest()
        {
            ta = new JTextArea();
            
            JScrollPane scrollPane = new JScrollPane(ta);
            scrollPane.setPreferredSize(new Dimension(200,400));
            
            JPanel bp = new JPanel();
            
            JButton b = new JButton("开始");
            b.setPreferredSize(new Dimension(60,25));
            bp.add(b);
            b.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    PageReader pr = new PageReader(AreaTest.this);
                }
            });
            add(scrollPane,BorderLayout.CENTER);
            add(bp,BorderLayout.SOUTH);
        }
        
        public static void main(String args[])
        {
            f = new AreaTest();
            f.setTitle("AreaTest");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(200, 400);
            f.setResizable(false);
            f.setVisible(true);
        }
    }
    import java.io.IOException;
    import java.io.InputStream;import java.net.URL;
    import java.net.URLConnection;
    import java.util.Scanner;public class PageReader
    {
        public AreaTest f = null;    private String charset = "utf-8";
        
        private String urlString = "http://www.baidu.com/";
        
        private StringBuffer HtmlContent = new StringBuffer();
        
        public PageReader(AreaTest f)
        {
            this.f = f;
            this.startRead();
        }
        
        private void startRead()
        {
            try
            {
                URL url = new URL(urlString);
                URLConnection connection = url.openConnection();
                
                InputStream is = connection.getInputStream();
                Scanner in = new Scanner(is, this.charset);
                while(in.hasNextLine())
                {
                    f.ta.append(in.nextLine()+"\r\n");
    //---------------2009-05-05 ADD START---------------------
                    f.paintAll(f.getGraphics());
    //---------------2009-05-05 ADD END---------------------
                }
                in.close();
                is.close();
                //System.out.println(HtmlContent);
            }catch(IOException e)
            {
                e.printStackTrace();
            }
        }
    }