幽哥

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

下面将通过JAVA的URL类来从网上得到图像

 

//从网络获取图像资源
//InternetAccess.java
import java.awt.*;
//import java.awt.event.*;
import javax.swing.*;
import java.net.*;

public class InternetAccess
{
  public static void main(String[] args)
  {
   ImageFrame frame=new ImageFrame(); 
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   //frame.show();//show方法已经过时
   frame.setVisible(true);
  }
}

class ImageFrame extends JFrame
{
  /**
  *
  */
 private static final long serialVersionUID = 1L;
public static final int WIDTH=300;
  public static final int HEIGHT=120;
 
  public ImageFrame()
  {
    setTitle("InternetAccess");
    setSize(WIDTH,HEIGHT);
   
    ImagePanel panel=new ImagePanel();
    Container contentPane=getContentPane();
    contentPane.add(panel);
  } 
}

class ImagePanel extends JPanel
{
  /**
  *
  */
  private static final long serialVersionUID = 1L;
  private Image image;
  URL url;
 
  public ImagePanel()
  {
   try
   {
    //指定要获取的资源的URL
    url=new URL("http://www.kklinux.com/uploads/090313/2_204213_1.jpg");
   }
   catch(MalformedURLException e)
   {
   
   }
   //获取指定URL上的图像
   image=Toolkit.getDefaultToolkit().getImage(url);
  }
 
  public void paintComponent(Graphics g)
  {
   super.paintComponent(g);
  
   int imageWidth=image.getWidth(this);
   int imageHeight=image.getHeight(this);
  
   //在窗口中显示图像
   g.drawImage(image, 0, 0, imageWidth, imageHeight, null);
   g.drawImage(image,0,0,null);
   //显示字符串
   g.drawString("正在下载图像...", 100, 80);
  }
}

运行结果:

 

当显示窗口时,先显示字符串,然后才显示图像。这个结果和我们的程序编写次序相反。原因在于JAVA使用了多线程机制。因为下载图像是比较费时的操作,而显示字符串是本地操作,如果不适用多线程,那么必须先等待图像下载完毕,然后字符串才能显示,这样在等待下载图像的过程中,用户恐怕不知道程序现在在做什么。因此采用多线程机制,程序不必一直等待下载操作,而是能够“同时”运行多个操作,这能够使得程序具有很好的界面友好性。

posted on 2010-10-04 18:36  幽哥  阅读(440)  评论(0编辑  收藏  举报