0

私はゲームを作成することになっていて、それを作成する自由を与えられています...しかし、私は自分が何をしているのかわかりません. 実行する方法が必要だったので、以前のラボの形式をコピーしましたが、問題が発生しました。私のGuiクラスは次のとおりです。

public class Gui implements Runnable {
    public Gui() { }
    ArrayList<Tile> _al;

    @Override
    public void run() {
          //where I want the _al variable to be used
    }
}

私がコピーしたコードは、Driver クラスを使用してこのメ​​ソッドを実行しました。

public class Driver {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Gui());
    }
}

クラスではこのメソッドについて説明していませんが、Google で調べたところ、プログラムが機能するためにはこれが必要であることがわかりました。ラボの難易度が大幅に上昇したので、今は迷っています。すべてのコードをフォーマットする簡単な方法があると確信していますが、実行メソッドとメインの関係がどのようなものか、または関連付け関係をコードで作成できるようにする方法がわかりません。私が検索したものは本当に役に立たなかったので、この質問が大丈夫であることを願っています.

すべてのコードが run() メソッド内にある場合、インスタンス変数を関連付ける方法は?

4

2 に答える 2

1

共有状態の更新を許可するために、Gui にコンストラクター引数を持たせることができます。

public class Gui implements Runnable {
    private final List<Tile> tiles;

    public Gui(List<Tile> tiles) {
        this.tiles = tiles;
    }

    @Override
    public void run() {
          tiles.add(new Tile());
    }
}

そして、それを使用するようにドライバーを変更します。

public final class Driver {
    public static void main(String[] args) {
        List<Tile> tiles = new ArrayList<Tile>();
        SwingUtilities.invokeLater(new Gui(tiles));
    }
}
于 2015-11-15T02:36:58.653 に答える
0

あなたはそれを正しくやった。_a1メソッドで使用できますrun

_a1インスタンス変数です。static修飾子がないため、これがわかります。同様にrun、インスタンスメソッドです。したがって、 にアクセスできます_a1。ただし、の新しいインスタンスはそれぞれGui、独自のインスタンスを取得します_a1

それがあなたの望むものではない場合、最も簡単な修正はstatic修飾子をに追加すること_a1です。その後、 のすべてのインスタンスで共有Guiされ、 から引き続きアクセスできますrun。Swing はランナブルを同時に実行しないので、並列アクセスに関する懸念はないはずです。

于 2015-11-15T02:31:19.577 に答える