java - KeyListener 第一次使用时没有响应?

标签 java swing jframe keylistener runnable

我查看了这些链接,没有一个对我有帮助。我使用 KeyListener 和 Runnalbe 使用 JFrame 制作游戏。我在过去制作的游戏中从未遇到过这个问题,但现在我要说的是:

  • 我启动我的程序,窗口出现,消息显示一切看起来都很好。
  • 按键不起作用 -我关上 window -第二次打开时一切正常。 -如果我重置虚拟机并重试,则回到第 1 步。

这是我的构造函数:

public Game()
{
    super("ZMan");
    addKeyListener(this);
    setSize(800,600);
    setVisible(true);


    i = createImage(800,600);
    b = i.getGraphics();
    makeLevel();
    souls = new Image[3];
    particles = new double[20][3];
    pc = 10;
    pH = 20;
    player = new Image[8];
    nme = new Image[8];
    showMessage = false;
    try
    {
        bg = ImageIO.read(new File("bg.png"));
        abg = ImageIO.read(new File("abg.png"));
        bil = ImageIO.read(new File("buildingP.png"));
        bilP = ImageIO.read(new File("building.png"));
        message = ImageIO.read(new File("./system/messageBG.png"));

        souls[2] = ImageIO.read(new File("sR.png"));
        souls[1] = ImageIO.read(new File("sG.png"));
        souls[0] = ImageIO.read(new File("sB.png"));
        rem = souls[0];
        //player
        player[0] = ImageIO.read(new File("./player/normal.png"));
        player[1] = ImageIO.read(new File("./player/pBloop.png"));
        player[2] = ImageIO.read(new File("./player/pscorp.png"));
        player[3] = ImageIO.read(new File("./player/pSqui.png"));
        player[4] = ImageIO.read(new File("./player/pCato.png"));
        player[5] = ImageIO.read(new File("./player/pChubs.png"));
        player[6] = ImageIO.read(new File("./player/pPluckers.png"));
        player[7] = ImageIO.read(new File("./player/pSpooky.png"));
        gate = ImageIO.read(new File("./gate.png"));
        levelUp = ImageIO.read(new File("./system/levelUp.png"));
        xL = ImageIO.read(new File("./player/x.png"));
        /*
        nme[0] = ImageIO.read(new File("./enemies/bloop.png"));
        nme[1] = ImageIO.read(new File("./enemies/bloop.png"));
        nme[2] = ImageIO.read(new File("./enemies/scorp.png"));
        nme[3] = ImageIO.read(new File("./enemies/squi.png"));
        nme[4] = ImageIO.read(new File("./enemies/cato.png"));
         */
        nme[0] = Toolkit.getDefaultToolkit().createImage("./enemies/bloob.png");
        nme[1] = Toolkit.getDefaultToolkit().createImage("./enemies/bloob.png");
        nme[2] = Toolkit.getDefaultToolkit().createImage("./enemies/scorp.png");
        nme[3] = Toolkit.getDefaultToolkit().createImage("./enemies/squi.png");
        nme[4] = Toolkit.getDefaultToolkit().createImage("./enemies/cato.png");
        nme[5] = Toolkit.getDefaultToolkit().createImage("./enemies/chubs.png");
        nme[6] = Toolkit.getDefaultToolkit().createImage("./enemies/pluckers.png");
        nme[7] = Toolkit.getDefaultToolkit().createImage("./enemies/spooky.png");
    }
    catch(Exception e){e.printStackTrace();}
    powerT = new String[8];
    powerT[0] = "You went back to normal";
    powerT[1] = "You are now Bloop!";
    powerT[2] = "You are now Scorp!";
    powerT[3] = "You are now Squi!";
    powerT[4] = "You are now Cato!";
    powerT[5] = "You are now Chubs!";
    powerT[6] = "You are now Pluckers";
    powerT[7] = "You are now Spooky";
    startAim();
    //music = new Music("./system/music/0.wav");
    t.start();
}

有人知道这个问题吗?

最佳答案

“要触发键盘事件,组件必须具有键盘焦点。”— How to Write a Key Listener 。我猜相关组件第二次获得焦点。您可以尝试requestFocusInWindow()或者,最好查看 How to Use Key Bindings .

附录:有一个按键绑定(bind)示例 here .

关于java - KeyListener 第一次使用时没有响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364141/

相关文章:

java - 如何在一台计算机上运行双JVM

java - Jframe 上的嵌套 Jpanel 中的问题

java - 如何更改 JFrame 内 System.out.println 局部变量的大小

Java - 放入 JscrollBar 后 JTextArea 未显示

java - 如何缩放 JPanel 以适应 JFrame

Java - 使用准备好的语句从数据库中提取

java - 如何在从mongodb聚合查询的java对象中保存数据

java - 在 JBoss 5.1 中取消部署 WAR 时出现 ZipFileException

java - JProgressBar 在被告知显示之前不可见

Java 从离散类和接口(interface)子类化?