应用程序不渲染所有粒子。线程“main”中的异常java.lang.StackOverflowError

时间:2016-11-09 06:35:31

标签: java swing stack-overflow graphics2d

所以我有一个类项目,我们应该使用MVC来重构使用Java Swing动画粒子系统的代码。我们利用Graphics2D来实现这一目标。我可以让一个粒子渲染,但是渲染所有粒子的问题。当从输入文件中读取时,控制台会读取它添加了5个粒子,但我只看到一个粒子在屏幕上弹跳。

当我尝试迭代ArrayList粒子(PSysModel)时得到的错误是:

Exception in thread "main" java.lang.StackOverflowError
    at java.util.AbstractCollection.toArray(AbstractCollection.java:176)
    at java.lang.String.split(String.java:2378)
    at java.lang.String.split(String.java:2422)
    at PaSkCode.PSysModel.<init>(PSysModel.java:22)

代码

    public class PSysView {

    PSysModel Psystem;

    PSysView() {
    }

    // draw all particles in psm
    void draw(PSysModel psm, Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHints(new       RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTI     ALIAS_ON));
        g2d.setColor(Color.RED);
    for(int i=1; i<=psm1.particleList.size();i++){
        PSysModel psm = psm1.particleList.get(i);
        g2d.fillOval(psm.px-psm.radius, psm.py-psm.radius, psm.radius*2, psm.radius*2);
        }
    }   

    // dump information on all particles in psm
    void dump(PSysModel psm, int lc) {
        System.out.println("Frame " + lc);
        System.out.println(psm.radius + " " + psm.px + " " + psm.py + " " + psm.velX + " " + psm.velY);
    }
}

1 个答案:

答案 0 :(得分:0)

@AndrewThompson感谢好友!解决方案是创建一个单独的粒子类,并使用ArrayList在模型和视图类中进行迭代。