【发布时间】:2015-07-02 22:58:01
【问题描述】:
我希望这个小程序可以写 x=0 和 x=10,但它没有:
import java.applet.*;
import java.awt.*;
/*
<applet code="deney1" width=300 height=100>
</applet>
*/
public class deney1 extends Applet {
int x=0; // current position
public void paint(Graphics g) {
g.drawString("x="+x, 0,20);
x+=10;
g.drawString("x="+x, 0,40);
x+=1;
}
}
这是怎么回事?
编辑:建议我的问题可能与这个问题重复:
how is paint() running without being called in the main method?
这篇文章告诉我,paint() 方法无需显式调用即可运行。但这并不能解释 paint() 中语句的执行顺序,而且我无法跟踪打印的 x 值。为什么不是 0 和 10?为什么不是 11 和 22? 为了让事情更清楚一点:
g.drawString("x="+x, 0,20); // 1
x+=10; // 2
g.drawString("x="+x, 0,40); // 3
x+=1; // 4
似乎:2 和 4 在 1 之前执行(x 变为 11)。然后在 3 之前只执行 2(x 变为 21)。
问题 1:为什么 2 和 4 在 1 之前执行?
问题 2:考虑到问题 1 的答案,为什么 4 没有在 3 之前第二次执行?
【问题讨论】:
-
awt自swing以来已过期。swing自JavaFX以来已过期。这不会回答您的问题,但这是一个很好的建议:永远不要调用它并使用JavaFX。 -
你的代码没问题,问题应该出在其他地方。也许在 main 方法中。
-
Paint 可能会因多种原因被调用,并且我会在快速连续的时间内调用多次。假设文本被打印出来(它为我做了),每次调用
paint时,x将增加 11... -
@WonderWorld 小程序没有
main方法 ;)