【问题标题】:initialize() before actionPerformed()在 actionPerformed() 之前初始化()
【发布时间】:2014-05-24 03:17:34
【问题描述】:

我有一个实现ActionListener 的类。我的actionPerformed() 方法运行良好。但是,在我的程序开始运行actionPerformed() 之前,我想做一些事情。我可以将boolean 放在actionPerformed() 中,然后以这种方式运行一次,但我正在寻找更清洁的东西。我不能只使用我的构造函数,因为我需要一个完全构造的对象来完成我想要做的事情。有没有办法添加诸如initialize()start() 之类的方法,它们将在actionPerformed() 开始之前运行?

一些示例代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Game implements ActionListener {

    public Game() {
        // Constructor
    }

    public void initialize() {
        // I want a method of some sort here which is run before the main game
        // loop so I can set it up
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // main game runs
    }

}

【问题讨论】:

  • I need a fully constructed object - 然后在构造函数的末尾添加代码。 actionPerformed() 方法与构造对象无关。您需要先创建对象,然后才能调用其 actionPerformed() 方法。
  • 您希望每次创建对象时都执行initialize() 吗?
  • @camickr 不幸的是我不能。因为我需要对象本身的实例来设置一些东西。相当的面条刮刀,嗯?
  • @karibasappa G C 是的。我将(可能)只创建一次对象,如果它是相关的
  • 好的,然后在下面看到我的答案

标签: java swing actionlistener startup initializer


【解决方案1】:

如果您希望每次创建对象时都进行初始化,可以使用实例初始化块(IIB)。

和静态初始化块(SIB),如果你希望初始化只发生一次。

所以在你的情况下,你想要创建对象,但在构建对象之前。

所以去像下面这样的IIB块

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Game implements ActionListener {

    public Game() {
        // Constructor
    }

    {
        // I want a method of some sort here which is run before the main game
        // loop so I can set it up
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // main game runs
    }

}

注意:我删除了初始化的方法签名并将其设置为 IIB。这将满足您的要求。 当你做Game g = new Game();

在您的构造函数Game() 执行之前IIB 块执行并且您将全部设置为调用actionPerformed() 方法。

【讨论】:

  • 所以如果我想在这里做一个开始菜单之类的事情,我会用它自己的 ActionListener 创建一个新线程吗?然后直到这个线程死掉才会调用actionPerformed?
  • 哦,所以它在我的对象被构​​造之前设置字段?我需要先实例化对象,然后才能弄乱这些字段
  • 我刚刚阅读了这篇文章,但我认为这不是我想要的。不过谢谢。学到了一些新东西(我将在其他领域使用:))
  • 哦,那么你不能像上面所说的那样使用SIB或IIB..你需要在构造函数的末尾调用initialize()方法
  • 正确。不过谢谢。在我找到我的问题的答案后,我会给你一个赞成票:) 想要等待,所以其他人认为我还没有它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多