简体   繁体   English

KeyListener第一次没有响应吗?

[英]KeyListener is unresponsive 1st time used?

I looked at these links, none helped me. 我查看了这些链接,没有任何帮助。 Im making a game with a JFrame using KeyListener and Runnalbe. 我使用KeyListener和Runnalbe使用JFrame制作游戏。 I've never had a problem with it in games i have made in the past, but now heres what im talking about: 在过去制作的游戏中,我从未遇到过任何问题,但是现在我正在谈论的是:

  • i start my program and the window comes up, message displays everything looks fine. 我启动程序,出现窗口,消息显示一切正常。
  • no keys work -i close the window -The 2nd time its opened everything works fine. 没有按键起作用-我关闭了窗口-第二次打开了一切,一切正常。 -If i reset the virtual machine and try again, back to square 1. -如果我重置虚拟机并重试,请回到1号方框。

here is my constructor: 这是我的构造函数:

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();
}

does nyone know the problem? 没有人知道这个问题吗?

"To fire keyboard events, a component must have the keyboard focus."— How to Write a Key Listener . “要触发键盘事件,组件必须具有键盘焦点。” — 如何编写按键监听器 I'm guessing the relevant component has focus the second time. 我想第二次关注的是相关组件。 You can try requestFocusInWindow() or, preferably, look at How to Use Key Bindings . 您可以尝试requestFocusInWindow()或者最好看看如何使用键绑定

Addendum: There's a key binding example here . 附录:有一个键绑定例子在这里

This may sound dumb, but it's more of a sanity check. 这听起来可能很愚蠢,但这更像是一项健全性检查。 Check your main method. 检查您的主要方法。 I'd recommend doing a debug stepthrough, making sure that the first time the window is launched, the constructor to Game is actually called...Nothing about the constructor appears to be bad (to me), which makes me think that the instantiation of the object might be hosed. 我建议进行调试,确保第一次启动窗口时,Game的构造函数实际上被调用了……关于构造函数的一切对我而言似乎都不是一件坏事,这使我认为实例化的物体可能被胶管了。

If it isn't that, I can't help you; 如果不是那样,我无能为力。 you'll have to wait for someone smarter in the specifics of your problem to answer :) 您将不得不等待更聪明的人来回答您的问题:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM