Java- Toolkit.getLockingState 没有更新

Java- Toolkit.getLockingState not updating

我正在尝试制作一个简单的机器人程序,它需要知道滚动锁定是否打开。我读了一个不同的问题,并被指向 Toolkit.getLockingKeyState()。 然而,当我启动程序时,这个方法正确地告诉了 scoll lock 是否打开,当 scroll lock 被更改时它拒绝更新。这是我的代码:

import java.awt.Toolkit;

import java.awt.event.KeyEvent;


/**
 * @author Luke Senseney
 *
 */
public class Mouse
{
    /**
     * @param args 
     */
    public static void main(String[] args)
    {
        Toolkit t=Toolkit.getDefaultToolkit();
        while(true)
        {
            t.sync();
            System.out.println(t.getLockingKeyState(KeyEvent.VK_NUM_LOCK));
            try
            {
                Thread.sleep(1000);
            }catch(InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }
}

此版本与宣传的完全一样。我预计不同之处在于这段代码从事件调度线程中请求状态(尽管我无法解释为什么会这样)。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class CheckLockingState {

    private JComponent ui = null;

    CheckLockingState() {
        initUI();
    }

    public void initUI() {
        if (ui != null) {
            return;
        }

        ui = new JPanel(new BorderLayout(4, 4));
        ui.setBorder(new EmptyBorder(4, 4, 4, 4));

        final JLabel l = new JLabel("Click button to check locking state..");
        ui.add(l, BorderLayout.PAGE_START);

        final Toolkit t = Toolkit.getDefaultToolkit();

        ActionListener checkStateListener = new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                boolean b = t.getLockingKeyState(KeyEvent.VK_NUM_LOCK);
                System.out.println(b);
                l.setText("" + b);
            }
        };

        JButton b = new JButton("Check Locking State");
        b.addActionListener(checkStateListener);
        ui.add(b);
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                CheckLockingState o = new CheckLockingState();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}