应用程序未呈现所有粒子。线程"main" java.lang.StackOverflowError 中的异常



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

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

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);
    }
}

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

最新更新