Java-Toolkit.getLockingState未更新
我正在尝试制作一个简单的机器人程序,需要知道滚动锁是否开启。我读了另一个问题,被指向Toolkit.getLockingKeyState()。 但是,此方法正确地告诉我启动程序时是否打开了scoll lock,当更改滚动锁时,它拒绝更新。这是我的密码:Java-Toolkit.getLockingState未更新,java,awt,Java,Awt,我正在尝试制作一个简单的机器人程序,需要知道滚动锁是否开启。我读了另一个问题,被指向Toolkit.getLockingKeyState()。 但是,此方法正确地告诉我启动程序时是否打开了scoll lock,当更改滚动锁时,它拒绝更新。这是我的密码: import java.awt.Toolkit; import java.awt.event.KeyEvent; /** * @author Luke Senseney * */ public class Mouse { /*
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);
}
}