【发布时间】:2011-06-16 04:42:16
【问题描述】:
哇...!!
我实际上将我的 JLabel 变量命名为 jll_img 而且我已经在里面设置了一个图标。
我的目的是旋转我将图标放入其中的这个 jlabel。
我通过制作一个按钮来测试它, 然后当单击按钮时,它将按线程旋转。 一个匿名线程,将从 0 度循环到 360 度。
这里
`//我的按钮操作
new Thread() {
private boolean doRotating = true;
private double norm = 0.0;
private double numbs = 0.0;
private double degreeIncrementation = 10.0;
@Override
public void run() {
while (doRotating) {
try {
ci = new CompoundIcon(jll_img.getIcon(), new TextIcon(jll_img, ""));
if (numbs == 360) {
numbs = 0.0;
System.err.println("transformed into earlier post");
doRotating = false;
ri = new RotatedIcon(ci, norm);
} else {
ri = new RotatedIcon(ci, degreeIncrementation);
}
System.err.println("degree is " + numbs);
jll_img.setIcon(ri);
numbs += degreeIncrementation;
this.sleep(10);
ri = null;
ci = null;
} catch (Exception exp) {
System.err.println("blurp!");
exp.printStackTrace();
}
}
}
}.start();`
要进行旋转,我需要 添加另外两个类,即RotatedIcon.java 和CompoundIcon.java 因为这两个类主要完成这项工作。
当我尝试单击它直到第 22 次时,不知何故出现此错误。
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.RotatedIcon.getIconHeight(RotatedIcon.java:129)
at logic.CompoundIcon.getIconHeight(CompoundIcon.java:211)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:229)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
at logic.RotatedIcon.paintIcon(RotatedIcon.java:175)
at logic.CompoundIcon.paintIcon(CompoundIcon.java:233)
这怎么会发生? 如果它可以运行到 21 日……但接下来的 22 日等等最终会失败?
【问题讨论】:
-
只是对
numbs == 360的评论。永远不要检查浮点值是否相等,而是使用适当的容差(例如Math.abs(numbs-360)<EPS)。此类问题破坏程序的情况很多。
标签: java swing exception rotation jlabel