package com.knutejohnson.demos; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import java.net.*; import javax.imageio.*; import javax.swing.*; public class Fader extends JPanel implements Runnable { final BufferedImage[] images; final double imageAspectRatio; volatile BufferedImage first,next; volatile AlphaComposite comp1 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1.0f); volatile AlphaComposite comp2 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.0f); URL url; volatile Thread thread; public Fader(String[] args) throws IOException { if (args.length == 0) { images = new BufferedImage[6]; for (int i=5; i>=0; i--) { InputStream is = getClass().getResourceAsStream( "images/" + Integer.toString(i+1) + "0_min_ago.jpg"); images[i] = ImageIO.read(is); } } else { System.out.println(args); images = new BufferedImage[args.length]; for (int i=0; i imageAspectRatio) w = h * imageAspectRatio; else h = w / imageAspectRatio; g.setComposite(comp1); g.drawImage(first,0,0,(int)w,(int)h,null); g.setComposite(comp2); g.drawImage(next,0,0,(int)w,(int)h,null); } public static void main(final String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JFrame frame = new JFrame("Fader"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Fader fader = new Fader(args); frame.getContentPane().add(fader); frame.pack(); frame.setVisible(true); fader.start(); } catch (IOException ioe) { JOptionPane.showMessageDialog(null,ioe.toString(), "IO ERROR",JOptionPane.ERROR_MESSAGE); } } }); } }