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?
给小妹看看,该怎么解决,谢谢大家了...
import com.sun.jna.platform.WindowUtils;
public static void setWindowAlpha(java.awt.Window, float);
public static void setWindowTransparent(java.awt.Window, boolean);
AWTUtilities 我在 linux 就用不了。
2、该类不属于官方提供 API 的包内的东西,属于方法不建议使用,官方不保证其向后兼容性
3、该类对于透明效果的处理应该是用了 BufferedImage 实现的,效率很差,很耗资源
4、该类实现的这些效果,在 java 7 中已经正式推出,通过 JFrame 的 setBackground 和 setOpaque 方法就可以实现(虽然在效率上似乎没有明显的改善)
5、该类应该是在 java 6 的某个 update 版本之后才推出的,我的 jdk1.6.0_26 反正是能找到这个类的,开始很喜欢,后来视之为毒瘤
at javax.imageio.ImageIO.read(ImageIO.java:1322)
at sample.FlowerRain.<init>(FlowerRain.java:31)
at sample.FlowerRain.main(FlowerRain.java:134)
需要导jar包 或用高版本的JDK
C:\Program Files\Java\jre6\lib\rt.jarC:\Program Files\Java\jdk1.6.0_20\jre\lib\rt.jar
两个jar替换成更高版本,试试行不.
并且AWTUtilities是内部的类,最好不要用了
说不定哪一天就被删掉没有了