日期:2014-05-20  浏览次数:20834 次

JAVA线程关于图片游览程序
btnShow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
for(int i=0; i<javaFiles.length; i++){
try{
System.out.println(javaFiles[i]);
im=new ImageIcon(javaFiles[i].toString());
j.repaint();
Thread.sleep(3000);  
}catch(InterruptedException e1){
}
}
}});


为什么我的图片游览程序游览功能(一张张的图片自动更新)只能显示更新最后一张图片(即程序运行只能出现最后一张图片更新到屏幕上来其他的图片都没更新到屏幕上来);是Thread.sleep(3000);要开辟一个新的线程吗不能再同一线程吗???


------解决方案--------------------
其实并不是只显示最后一张,而是在同一位置前面N多张图片都被for轮(画)过了,显示的时候按逻辑应该是lz所希望的效果,可实际上是,这些图片已经被for按照i“一次性”全画出来,直到for轮完才显示出来。
通俗点:不是一边for一边画,而是for完才画出来
------解决方案--------------------
通俗点:不是一边for一边显示,而是for完才显示出来
这样更合适一点,呵呵呵
------解决方案--------------------
把for语句放在另一个线程中吧,只有这样做了。
不要在事件处理程序里放入循环。
------解决方案--------------------
附上一段我刚刚写的代码(已经测试过的)可供参考希望对你有所帮助
 

Java code
public Image[]img;
    public int index ;
    public MyCanvas() {
          try {
            img= new Image[3];
            img[0] = Image.createImage("/1.PNG") ;
            img[1] = Image.createImage("/2.PNG") ;
            img[2] = Image.createImage("/3.PNG") ;
            new Thread(this).start() ;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void paint(Graphics g) {
       g.setColor(0);
       g.fillRect(0, 0, getWidth(), getHeight());
       g.drawImage(img[index], 0, 0, 0);
     
    }
    
    public void run() {
        while (true) {
              repaint();
              serviceRepaints();
              try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
             index =(index == 2) ? index = 0 : ++index;
        }
    }