2016-12-13 3 views
0
for(int i = 0; i < colorOrder.size(); i++) 
    { 
     String colour = ""; 
     colour = gui.getUserInputElement(i); 
     userColourInput.add(colour); 
    } 

基本的に私は "サイモンは言う"ゲームを作成しています。私はデータを操作できるように、あるクラスに保持されているarrayListから別のクラスに保持されているarrayListにデータを移動しようとしています。 ColorOrderとuserColourInputは、配列リストであり、次のようにgetUserInputElement()メソッドは、次のとおりです。なぜこれがヒープOutOfMemoryエラーを生成していますか?

public String getUserInputElement(int index) 
    { 
     return userInput.get(index); 
    } 

私は取得していますエラーメッセージは次のとおりです。

java.lang.OutOfMemoryErrorを:Javaヒープスペース

at java.util.Arrays.copyOf(Arrays.java:3210) 
at java.util.Arrays.copyOf(Arrays.java:3181) 
at java.util.ArrayList.grow(ArrayList.java:261) 
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235) 
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227) 
at java.util.ArrayList.add(ArrayList.java:458) 
at Game.gameLoop(Game.java:87) 
at Game.<init>(Game.java:23) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
at bluej.runtime.ExecServer$3.run(ExecServer.java:746) 

GameLoopは以下の通りです。どの部分が必要なのかわからないので、全部投稿すればうまくいけばそれほど不便ではありません。 userColourInputあなたは明確決して

public void gameLoop() 
{ 
    while(true) 
    { 
     String input = ""; 
     boolean userInputFull = false; 
     int inputSize = 0; 

     if(orderPulled == false) 
     { 
      getColorOrder(); 
      System.out.println("colorOrder set to order ArrayList"); 
      userClicks = colorOrder.size(); 
      System.out.println("User clicks set to " + userClicks); 
      orderPulled = true; 

     } 


     if(flashed == false) 
     { 
      pause(2000); //taking this out of here and putting in init or in this loop 
     }    //causes a freeze, why? 



     if(flashed == false) 
     { 
      for(int i = 0; i < colorOrder.size(); i++) 
      { 
       gui.flashButton(colorOrder.get(i)); 
       System.out.println("Flashing " + colorOrder.get(i)); 
       pause(500); 
      } 
      gui.changeInstructionCopy(); 
      flashed = true; 
      gui.enableButtons(); 
      System.out.println("colorOrder size: " + colorOrder.size()); 

     } 

     inputSize = gui.getUserInputSize(); 

     if(inputSize == colorOrder.size()) 
     { 
      gui.disableButtons(); 

      for(int i = 0; i < colorOrder.size(); i++) 
      { 
       String colour = ""; 
       colour = gui.getUserInputElement(i); 
       userColourInput.add(colour); 
      } 

     } 
     else 
     { 
      gui.enableButtons(); 
      gui.printUserInputArray(); 
     } 







    } 
} 
+0

ここに十分な情報がありません。もっとコードを見る必要があります。特にgameLoopは、問題のある場所にある可能性が高いです。 –

+0

実行可能な最小の例を提供できますか? –

+0

ああ、私の謝罪。私は今それを投稿します。編集:掲示される。 –

答えて

0

ほとんどの場合、:あなたがメモリ不足になるまで、あなたのwhile (true)ループの中で、それに要素を追加し、追加し続けます。

+0

はっきりとはどういう意味ですか? –

+0

@Ajek:そこから要素を削除します。あなたが私たちに示したことから、あなたは記憶がなくなるまで物事を追加し続けます。 – NPE

+0

しかし、私がする必要があるのは、userInput arraylistの3つの要素をuserColourInput arrayListに追加することだけです。 forループを使用しているので、3つ以上の要素がどのように追加されるのかよく分かりません。 –

関連する問題