我想做一个程序基于JFrame,用JLabel显示两张图片,图片隔两秒种换一次,请问如何用线程来做?谢谢
我下面的程序没做完,请大家帮帮忙:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
import java.net.URL;
import javax.swing.event.*;
class Demo extends JFrame
{
Demo()
{
MyPanel mp=new MyPanel();
new Thread(mp).start();this.getContentPane().add(mp);
setSize(400,300);
setVisible(true);
}
public static void main(String[] args)
{
Demo dm=new Demo();}
}class MyPanel extends JPanel implements Runnable
{
//JLabel jlbl;
public void run()
{
URL u;
try 
{
u=Class.forName("Demo").getResource("donghua/1.gif");
// Image img=this.getToolkit().getImage;// Thread.sleep(2000);
// u=Class.forName("Demo").getResource("donghua/2.gif"); 
}
catch (Exception ex) 
{
ex.printStackTrace();
}}

解决方案 »

  1.   

    将两张.jpg图片放在本程序的同目录下
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.net.URL;
    public class Demo extends JFrame implements Runnable
    {
    JLabel titleLabel=new JLabel(),iconLabel=new JLabel();
    Thread th;
    Image imag;
    String filename1="a.jpg",filename2="b.jpg";
    Demo(){
    super();
    this.getContentPane().setLayout(new BorderLayout());
    this.getContentPane().add(titleLabel,BorderLayout.NORTH);
    this.getContentPane().add(iconLabel,BorderLayout.CENTER);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(800,600);
    setVisible(true);
    if(th==null){
     th=new Thread(this);
     th.start();
    }
    }
    public void run(){
    for(int i=0;i<2;i=(i+1)%2){
    try{
    titleLabel.setText("tu"+(i+1));
    if(i==0) imag=Toolkit.getDefaultToolkit().getImage(filename1);
    else imag=Toolkit.getDefaultToolkit().getImage(filename2);
    iconLabel.setIcon(new ImageIcon(imag));
    repaint();
    Thread.sleep(500);
    }catch(Exception e){}
    }
    }
    public static void main(String[]args){
    Demo dm=new Demo();
    }
    }还行吗...
      

  2.   

    用JLabel效果不好
    不支持图片缩放
    可使用JPanel...
      

  3.   

    http://community.csdn.net/Expert/topic/4504/4504994.xml?temp=.9963037