import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
class Win extends JFrame
implements ActionListener,Runnable
{
JButton button;
URL url;
JTextField text; 
JTextArea area;
byte b[]=new byte[118];
Thread thread;
public Win()
{
text=new JTextField(20);
area=new JTextArea(12,12);
button=new JButton("确定");
button.addActionListener(this);
thread=new Thread(this);
JPanel p=new JPanel();
p.add(new JLabel("输入网址"));
p.add(text);
p.add(button);
Container con=getContentPane();
con.add(new JScrollPane(area),BorderLayout.CENTER);
con.add(p,BorderLayout.NORTH);
setBounds(60,60,360,300);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionperformed(ActionEvent e)
{
if(!(thread.isAlive()))
thread=new Thread(this);
try
{
thread.start();
}
catch(Exception ee)
{
text.setText("我正在读取"+url);
}
}
public void run() throws IOException
{
try
{
int n=-1;
area.setText(null);
url=new URL(text.getText().trim());
InputStream in=url.openStream();
while((n=in.read(b))!=-1)
{
String s=new String(b,0,n);
area.append(s);
}
}
catch(MalformedURLException e1)
{
text.setText(""+e1);
return;
}
}    public void actionPerformed(ActionEvent e) {
    }


}
public class Main 
{
public static void main(String[] args)
    {
new Win();
}
}

解决方案 »

  1.   

    补充一下:也就是说,java.io.IOException  这个异常你必须捕获,不能抛出。
      

  2.   

    1.源接口不抛异常的话,那你的类也不能抛出
    2.继承类只能抛出 narrower and fewer than interface的异常
      

  3.   

    好的,又纵容LZ一次:
    修改后的代码如下,解释在注释里面已经写得很清楚了:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.io.*;class Win extends JFrame implements ActionListener, Runnable {
    JButton button; URL url; JTextField text; JTextArea area; byte b[] = new byte[118]; Thread thread; public Win() {
    text = new JTextField(20);
    area = new JTextArea(12, 12);
    button = new JButton("确定");
    button.addActionListener(this);
    thread = new Thread(this);
    JPanel p = new JPanel();
    p.add(new JLabel("输入网址"));
    p.add(text);
    p.add(button);
    Container con = getContentPane();
    con.add(new JScrollPane(area), BorderLayout.CENTER);
    con.add(p, BorderLayout.NORTH);
    setBounds(60, 60, 360, 300);
    setVisible(true);
    validate();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } public void actionperformed(ActionEvent e) {
    if (!(thread.isAlive()))
    thread = new Thread(this);
    try {
    thread.start();
    } catch (Exception ee) {
    text.setText("我正在读取" + url);
    }
    } public void run() {// 楼主怎么既然写了try{}catch(){}有去throws呢.
    //2者只要选择一种就可以了.catch()的时候,范围要从小到大,如果楼主想偷懒的
    //话,就直接catch(Exception)就是了.

    try {
    int n = -1;
    area.setText(null);
    url = new URL(text.getText().trim());
    InputStream in = url.openStream();
    while ((n = in.read(b)) != -1) {
    String s = new String(b, 0, n);
    area.append(s);
    }
    } catch (MalformedURLException e1) {
    text.setText("" + e1);
    return;
    } catch (IOException e) {// 修改了的地方.
    e.printStackTrace();
    }
    } public void actionPerformed(ActionEvent e) {
    }}public class Main {
    public static void main(String[] args) {
    new Win();
    }
    }