package novemberTestDay;import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.util.ArrayList;
import java.util.List;import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;import com.sun.awt.AWTUtilities;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;public class FlowerRain extends JFrame {    private static final long serialVersionUID = -8037287523655159012L;    private int num = 99;// 花朵数量
    private int speed = 3;// 下降速度
    private boolean flag = true;
    private List<JLabel> labelList = new ArrayList<JLabel>(num);
    private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    private ImageIcon icon = new ImageIcon(ImageIO.read(this.getClass().getResourceAsStream("aa.png")));// 花朵图片    public FlowerRain() throws Exception {        getContentPane().setLayout(null);
        setTitle("漫天花雨");
        setSize(screenSize);
        setResizable(false);
        setUndecorated(true);
        setAlwaysOnTop(true);
        setLocationRelativeTo(null);
        setIconImage(icon.getImage());
        AWTUtilities.setWindowOpaque(this, false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        // 防止最小化
        addWindowStateListener(new WindowStateListener() {
            public void windowStateChanged(WindowEvent e) {
                if (getState() == 1) {
                    setState(0);
                }
            }
        });        // Ctrl + E 关闭窗口
        addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_E) {
                    dispatchEvent(new WindowEvent(FlowerRain.this, WindowEvent.WINDOW_CLOSING));
                }
            }
        });        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                flag = false;// 将线程循环标志置为false
            }
        });        for (int i = 0; i < num; i++) {
            JLabel jlbl = new JLabel(icon);
            jlbl.setSize(20, 20);
            jlbl.setLocation(random(screenSize.width), random(screenSize.height));            labelList.add(jlbl);
            add(jlbl);
        }    }    public void move() {
        new Thread() {
            public void run() {
                while (flag) {
                    try {
                        SwingUtilities.invokeLater(new Runnable() {
                            public void run() {
                                for (int i = 0; i < labelList.size(); i++) {
                                    JLabel jlbl = labelList.get(i);
                                    Point location = jlbl.getLocation();                                    jlbl.setLocation(location.x + (i % 5 - 2), location.y + speed);                                    location = jlbl.getLocation();
                                    if (location.y >= screenSize.height || location.x <= 0 || location.x >= screenSize.width) {
                                        jlbl.setLocation(random(screenSize.width), 0);
                                    }
                                }
                            }
                        });
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
        }.start();    }    public void start() {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    setVisible(true);
                    move();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }    public int random(int max) {
        return (int) (Math.random() * max);
    }    public int random(int min, int max) {
        return random(max - min) + min;
    }    public static void main(String[] args) throws Exception {
        new FlowerRain().start();
    }
}Exception in thread "main" java.lang.NoSuchMethodError: sun.awt.SunToolkit.isTranslucencyCapable(Ljava/awt/GraphicsConfiguration;)Z
at com.sun.awt.AWTUtilities.isTranslucencyCapable(AWTUtilities.java:443)
at com.sun.awt.AWTUtilities.setWindowOpaque(AWTUtilities.java:376)
at novemberTestDay.FlowerRain.<init>(FlowerRain.java:43)
at novemberTestDay.FlowerRain.main(FlowerRain.java:134)at novemberTestDay.FlowerRain.<init>(FlowerRain.java:43)错误提示 AWTUtilities.setWindowOpaque(this, false);这句
我是在http://download.csdn.net/download/x19881216/3738038  上面下的AWTUtilities  还有我的jdk1.6.0_03为什么就没有AWTUtilities?
给小妹看看,该怎么解决,谢谢大家了...  

解决方案 »

  1.   

    运行通过,AWTUtilities是JDK6以后的某个版本才有的工具类,估计是你的JDK版本过老的原因吧。
      

  2.   

    java 6 实现 透明窗口 使用 JNA ,platform.jar里提供了工具类。
    import com.sun.jna.platform.WindowUtils;
      public static void setWindowAlpha(java.awt.Window, float);
      public static void setWindowTransparent(java.awt.Window, boolean);
    AWTUtilities 我在 linux 就用不了。
      

  3.   

    AWTUtilities 建议不要使用1、该类提供的方法没有实现跨平台,比如在 Linux 下就会报错
    2、该类不属于官方提供 API 的包内的东西,属于方法不建议使用,官方不保证其向后兼容性
    3、该类对于透明效果的处理应该是用了 BufferedImage 实现的,效率很差,很耗资源
    4、该类实现的这些效果,在 java 7 中已经正式推出,通过 JFrame 的 setBackground 和 setOpaque 方法就可以实现(虽然在效率上似乎没有明显的改善)
    5、该类应该是在 java 6 的某个 update 版本之后才推出的,我的 jdk1.6.0_26 反正是能找到这个类的,开始很喜欢,后来视之为毒瘤
      

  4.   

    这个是Java特有的类,一般不包含在jdk中。去官网下一个匹配的jdk找找看
      

  5.   

    推出這個類就是為了在jdk7中實現透明功能做準備的,估計在jdk7的更新裡會提高效率
      

  6.   

    具体代码逻辑没看,不过看楼主贴得异常应该是 当前版本的jdk中SunToolkit缺少isTranslucencyCapable方法,换个更高版本的jdk(自带AWTUtilities).
      

  7.   

    Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(ImageIO.java:1322)
    at sample.FlowerRain.<init>(FlowerRain.java:31)
    at sample.FlowerRain.main(FlowerRain.java:134)
      

  8.   

    哦 看了这么多 我其实不想换JDK  有没有解决办法? 呵呵 总之要谢谢大家了
      

  9.   

    import com.sun.awt.AWTUtilities    这个是什么玩意??????
      

  10.   


    需要导jar包 或用高版本的JDK
      

  11.   

    com.sun.awt.AWTUtilities 表示没用过
      

  12.   


    C:\Program Files\Java\jre6\lib\rt.jarC:\Program Files\Java\jdk1.6.0_20\jre\lib\rt.jar 
    两个jar替换成更高版本,试试行不.
      

  13.   

    https://github.com/twall/jna/tree/master/dist下载jna.jar,platform.jar。使用import com.sun.jna.platform.WindowUtils;
      

  14.   

    这个异常一看就知道是没有这个方法了
    并且AWTUtilities是内部的类,最好不要用了
    说不定哪一天就被删掉没有了