我做了System.out.println
的{{1}}并且它返回了数千的int,随着时间的推移很快就会上升。我正在做一个Java applet,它创建tile并随机为ArrayList中的每个点生成对象变量。
我不知道为什么会这样,但我可以定期清除数组列表,但我不应该这样做。
tileList.size()
从
调用它col = 20;
row = 10;
public void createTiles()
{
for (int i = 0; i <= col; i++)
{
for (int j = 0; j <= row; j++)
{
if (r.nextInt(100) >= slides / 2)
{
tileList.add(new Tile(i * 64, j * 64, this.getHeight(), this.getWidth(), false, 0, false));
}
if (r.nextInt(100) <= slides / 2)
{
tileList.add(new Tile(i * 64, j * 64, this.getHeight(), this.getWidth(), true, 0, false));
}
if (r.nextInt(500) <= 1)
{
tileList.add(new Tile(i * 64, j * 64, this.getHeight(), this.getWidth(), false, 0, true));
}
}
}
}
答案 0 :(得分:3)
在java Applet's Paint
方法中被无限次调用以为用户提供一致的UI,只需在Paint中添加System.out.println()即可尝试。
因此,请避免在Paint
内调用这些方法。
答案 1 :(得分:0)
看起来tileList是您的类的成员,当您调用createTiles()时,您可以将Tiles添加到此列表中。如果多次调用createTiles(),则Tiles将添加多个时间。我认为你骂了
tileList = new ArrayList();
或
tileList.clear();
在createTiles()方法的第一行重新初始化或清除。
答案 2 :(得分:0)
您应该使用createTiles()
或init()
方法调用create()
方法。您的列表包含非常多的磁贴,因为在applet中,始终会调用paint()
方法。此外,您不应该覆盖paint()
方法。在基于swing的程序中,建议您改为覆盖paintComponent()
方法。
Applet正在变老,未来的Java版本将无法支持它们。我建议切换到应用程序。