如果所有代码都在 运行() 方法中,如何关联实例变量?

How to associate an instance variable if all the code is inside a run() method?

我应该创建一个游戏,我们可以自由地创建它...但我不知道我在做什么。我复制了以前实验室的格式,因为我需要一种方法来 运行 它,但现在我遇到了问题。我的桂class如下:

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

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

我复制的代码使用了驱动程序class到运行这个方法:

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

我们没有在 class 中讨论过这种方法,但是从谷歌搜索我了解到这是程序运行所必需的。实验室的难度有了巨大的飞跃,所以我现在迷路了。我确定有一种简单的方法来格式化所有代码,但我不知道 运行 方法和 main 之间的关系是什么,或者我如何才能做到这一点以便在我的代码中建立关​​联关系代码。我搜索的内容没有任何帮助,所以我希望这个问题没问题。

如果所有代码都在 运行() 方法中,如何关联实例变量?

你做对了。您可以在 run 方法中使用 _a1

_a1 是一个 实例 变量。你可以这么说,因为它没有 static 修饰符。同样,run 是一个实例方法。因此它可以访问 _a1。但是,Gui 的每个新实例都会得到自己的 _a1 实例。

如果这不是您想要的,绝对最简单的解决方法是将 static 修饰符添加到 _a1。然后它将在 Gui 的所有实例之间共享,并且仍然可以从 run 访问。我相信 Swing 不会 运行 运行 同时启用,所以不应该担心并行访问。

您可以使 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));
    }
}