這裏是我的Applet類:爲什麼我的applet的paint方法拋出ConcurrentModificationException
package DavidPackages.Prototypes.Samples.BubblesV2SSCCE;
import java.applet.Applet;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import java.util.Random;
public class BubbleAppletV2SSCCE extends Applet implements Runnable{
private Thread thread;
private ArrayList<Ellipse2D> circles;
public void init(){
//Initialize bubbles with one entry so that we have a bubble to start out with
Random r = new Random();
circles = new ArrayList<Ellipse2D>();
circles.add(new Ellipse2D.Float(5, 5, 15, 15));
thread = new Thread(this);
thread.start();
}
public void run(){
while(true){
update();
repaint();
try{
Thread.sleep(10);
}catch(InterruptedException ie){
ie.printStackTrace();
}
}
}
private void update(){
circles.add(new Ellipse2D.Float(5, 5, 15, 15));
}
public void paint(Graphics graphics){
for(Ellipse2D circle : circles){
((Graphics2D) graphics).draw(circle);
}
}
public void stop(){}
}
這裏是堆棧跟蹤:
Exception in thread "AWT-EventQueue-1" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
at java.util.AbstractList$Itr.next(AbstractList.java:420)
at DavidPackages.Prototypes.Samples.BubblesV2SSCCE.BubbleAppletV2SSCCE.paint(BubbleAppletV2SSCCE.java:43)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:276)
at sun.awt.RepaintArea.paint(RepaintArea.java:241)
at apple.awt.ComponentModel.handleEvent(ComponentModel.java:268)
at java.awt.Component.dispatchEventImpl(Component.java:4159)
at java.awt.Container.dispatchEventImpl(Container.java:2068)
at java.awt.Component.dispatchEvent(Component.java:3918)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:501)
at java.awt.EventQueue.access$000(EventQueue.java:80)
at java.awt.EventQueue$1.run(EventQueue.java:462)
at java.awt.EventQueue$1.run(EventQueue.java:461)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:84)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:95)
at java.awt.EventQueue$2.run(EventQueue.java:476)
at java.awt.EventQueue$2.run(EventQueue.java:475)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:84)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:473)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
這裏唯一的呼叫是在我的代碼是:
at DavidPackages.Prototypes.Samples.BubblesV2SSCCE.BubbleAppletV2SSCCE.paint(BubbleAppletV2SSCCE.java:43)
這是哪一行:
for(Ellipse2D circle : circles){
更多詳細信息:
- 我在的IntelliJ IDEA運行此10.5.4
- 我在Mac上運行此運行OSX 10.5.8
- 唯一的例外是更容易當有泡沫的多個實例在氣泡
- 唯一的例外是更可能發生的小程序的多個實例正在運行拋出拋出
我很困惑,因爲我沒有看到如何在控制循環中修改氣泡的內容。
有沒有人有任何想法?
獎金問題:
- 我的目的是最終創造了某人的機器上運行,而不是在網絡瀏覽器遊戲。除了小程序以外,我應該使用什麼?
- 我應該用什麼來代替AWT?
關於那裏的第二個獎金問題。我發現this article其中說:
AWT提供了一個豐富的圖形環境,尤其是在Java V1.2及更高版本。通過Graphics2D對象以及Java2D和Java3D服務,可以創建許多功能強大的圖形應用程序,例如繪圖和製圖軟件包,並結合JavaSound提供競爭性交互式遊戲。
這使我相信AWT確實適合我。或者作者是錯誤的?這篇文章是從2006年開始的,所以它有點過時了,但並不多。
最新通報(的東西,是不是在原帖):
- 的長塊註釋掉的代碼中刪除
- 更新我的例子
- 額外的獎勵問題 從文章
- 添加報價比較AWT和Swing和SWT
1)爲了更好地幫助您,請發佈[SSCCE](http://sscce.org/)。而忽略了註釋代碼的巨大部分。 2)爲什麼在這個千年AWT組件? 3)爲什麼網頁中的小程序與自由浮動框架相反? 4)不要重寫'update()'(來自'Component')使用不同的方法名稱。 5)它看起來像'while(true)'循環是錯誤的 - 當我看到一個SSCCE時更多細節。 –
啊。是的。我的意思是刪除那麼多的評論,但是當我試圖讓所有東西都呈現爲代碼時,它肯定已經找回了方向。我將參加一個SSCCE。同時:@ 2)因爲我不知道我在做什麼,你會建議什麼? @ 3)我實際上正在尋找自由浮動的框架,我該怎麼做? Jframes?感謝您的好評。 – David
好的。我已經添加了一個SSCCE – David