回答編集履歴

1

具体的説明

2016/03/27 03:25

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1 +1,55 @@
1
1
  Boardインスタンスの生成時にReverseインスタンスの生成が発生し、その中でBoardインスタンスの生成が発生する、という循環に陥ります。Reverseで新たにBoardを生成するのではなく、Boardインスタンスを受け取って格納するようにするといいのではないでしょうか?
2
+
3
+
4
+
5
+ ---
6
+
7
+
8
+
9
+ シングルトンの使い方を間違っているのでまずはそこから…
10
+
11
+ Boardをシングルトンにしたいならコンストラクタをprivateにしないといけません。
12
+
13
+ ```java
14
+
15
+ //コンストラクタをprivateに
16
+
17
+ private Board() {
18
+
19
+ boardarray = new int[MASS][MASS];
20
+
21
+ setPreferredSize(new Dimension(WIDETH, HEGHT));
22
+
23
+ addMouseListener(new Reverse());
24
+
25
+ }
26
+
27
+ ```
28
+
29
+ そしてインスタンス取得をstaticにし、このメソッド経由で唯一のBoardインスタンスを取得するようにします。
30
+
31
+ ```java
32
+
33
+ //インスタンス取得メソッドをstaticに
34
+
35
+ public static Board getInstance(){
36
+
37
+ return board;
38
+
39
+ }
40
+
41
+ ```
42
+
43
+ そして、Reverseインスタンスを生成する際に、ReverseのメンバのBoardにはシングルトンのBoardを入れなければなりません。
44
+
45
+ ```java
46
+
47
+ public class Reverse extends JPanel implements MouseInputListener {
48
+
49
+
50
+
51
+ Board board = Board.getInstance();
52
+
53
+ ```
54
+
55
+ ここでnewをしていたため、互いが互いのインスタンスを生成し続ける循環になり、StackOverflowになったのです。