Java TSM AdjustCapsLockLEDForKeyTransitionHandling

问题描述

我正在尝试从 KeyEvent 中捕获向上、向下、向右、向左键,当我按下某个键时收到以下消息:

2021-06-05 00:46:11.176 java[47646:1823153] TSM AdjustCapsLockLEDForKeyTransitionHandling - _ISSetPhysicalKeyboardCapsLockLED 抑制

这是我的代码

Character.java

import java.awt.Image;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;


public class Character {
    private int dx;
    private int dy;
    private int x;
    private int y;
    private String imageLocation;
    private Image image;
    private boolean moveable;
    
    public Character(int x,int y,String imgLoc,boolean m){
        this.x = x;
        this.y = y;
        imageLocation = imgLoc;
        ImageIcon ii = new ImageIcon(this.getClass().getResource(imageLocation));
        image = ii.getimage();
        moveable = m;
    }

    public void move() {
        if(moveable){
            x += dx;
            y += dy;
        }
    }

    public boolean moveable(){
        return moveable;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public Image getimage() {
        return image;
    }

    public void keyPresed(KeyEvent e){
        int key = e.getKeyCode();

        if(key == KeyEvent.VK_LEFT){
            System.out.println("left key pressed");
            dx = -1;
        }
        if(key == KeyEvent.VK_RIGHT){
            dx = 1;
        }
        if(key == KeyEvent.VK_UP){
            dy = -1;
        }
        if(key == KeyEvent.VK_DOWN){
            dy = 1;
        }
    }
    public void keyreleased(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            dx = 0;
        }

        if (key == KeyEvent.VK_RIGHT) {
            dx = 0;
        }

        if (key == KeyEvent.VK_UP) {
            dy = 0;
        }

        if (key == KeyEvent.VK_DOWN) {
            dy = 0;
        }
    }
}

** 添加:**

休息室.java

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JPanel;
import javax.swing.Timer;

public class Lounge extends JPanel implements ActionListener{
    private Timer timer;
    private Player player;
    
    public Lounge(){
       //addKeyListener(new TAdapter());
        setFocusable(true);
        setBackground(Color.BLACK);
        setDoubleBuffered(true);

        player = new Player(1000,40);

        timer = new Timer(5,this);
        timer.start();
    }
    public void paint(Graphics g){
        super.paint(g);

        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(player.getimage(),player.getX(),player.getY(),this);

        Toolkit.getDefaultToolkit().sync();
        g.dispose();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        player.move();
        repaint();
    }
    
    private class TAdapter extends KeyAdapter{
        public void keyreleased(KeyEvent e){
            player.keyreleased(e);
        }
        public void keypressed(KeyEvent e){
            player.keyreleased(e);
        }
    }
}

Main.java

import javax.swing.JFrame;

public class Main extends JFrame{
    public Main(){
        add(new Lounge());

        setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        setSize(1280,720);
        setLocationRelativeto(null);
        setTitle("Be My Guest");
        setResizable(false);
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new Main();
    }
}

我在 MacBook pro 2017 上使用 Visual Studio Code

请帮帮我!

解决方法

我认为问题在于最初按下了 Caps-Lock 键,我在 here 上发现了类似的问题

我发现的另一个问题是方法 keyPressed 被错误地拼写为 keyPresed,这也可能导致一些问题