0
我有这样的代码,repaint()方法在无限for循环中如何表现?
import java.awt.*;
import java.applet.*;
public class FirstApplet extends Applet
{
int len;
char ch;
String msg="Hello World ";
public void init()
{
setBackground(Color.CYAN);
setForeground(Color.WHITE);
}
public void start()
{
System.out.println("Inside Start");
repaint();
}
public void paint(Graphics g)
{
System.out.println("Inside paint");
g.drawString(msg,200,200);
}
}
它输出蓝绿色背景的Hello World上it.And控制台(CMD)上,其输出 -
内开始
内油漆
现在,如果我修改代码以这个 -
import java.awt.*;
import java.applet.*;
public class FirstApplet extends Applet
{
String msg="Hello World ";
int len;
char ch;
public void init()
{
setBackground(Color.CYAN);
setForeground(Color.WHITE);
}
public void start()
{
System.out.println("Inside Start");
for(;;)
{
repaint();
}
}
public void paint(Graphics g)
{
System.out.println("Inside paint");
g.drawString(msg,200,200);
}
}
它输出一个白色屏幕,没有文本,并在控制台上,它只是输出 -
内开始
我无法理解第二个程序的输出,虽然我每次都调用for循环中的repaint(),但为什么applet窗口的颜色不会变为CYAN颜色,为什么它不在控制台上打印“Inside paint”?有人可以帮我解决。
@气垫船,我知道我可以通过线程克服这个问题,因为我没有看到秋千yet.But什么是重绘的原因( )没有执行。我不明白你的意思,请你详细说明你的观点。谢谢 –
@RajMalhotra:你错了 - 重绘()被调用并正在执行,但绘图管理器无法因为它在GUI的事件线程上执行此操作。如果GUI的事件线程被捆绑,则不能完成绘画,纯粹而简单。 –
@RajMalhotra:见编辑回答。 –