D'accord, avant que cela ne soit signalé comme une duplication possible, j'ai déjà essayé le code suivant: et il se retourne toujours faux pour moi [voir ci-dessous]. Est-ce que quelqu'un pourrait confirmer si cela est censé fonctionner et je l'abuse, ou si cela est connu d'être cassé? S'il est en fait cassé, quelqu'un a-t-il une meilleure méthode à utiliser? P> EDIT: strong> P> D'accord, je viens de découvrir quelque chose de plus. Il semble juste de retourner ce qu'il était au début de mon lancement de programmes. Si je démarre le programme avec cela, il est dit que c'est sur, et vice versa. Voici mon code: p> et c'est toujours toujours imprimer tout ce qu'il a commencé comme p> (ex. Si je commence par des capuchons verrouillés, même si je Basculez-le juste après, il imprime: P> Caps Lock est maintenant: ON P>
Caps Lock est maintenant: ON P>
Caps Lock est maintenant: ON P>
Caps Lock est maintenant: ON P>
blockQuote> etc., Si je commence avec elle désactivé, il imitera quoi que ce soit) p> p>
3 Réponses :
Poker autour, je pense que Vous pouvez essayer Keyboardutils , mais On dirait que cela signifie que vous devez transporter des frais généraux de JNA. P> getLockingkeyState () code> pourrait être cassé. p>
Je pense que je vais finir par utiliser des JNI et ajouter des auditeurs de clés mondiaux; Étant donné que je peux obtenir l'état de verrouillage des capuchons lors du démarrage et détecter lorsque c'est modifié (lorsque vous appuyez sur le bouton), je devrais être capable de le garder une trace dans un booléen et basculer en cas de besoin.
@Dave pourriez-vous donner un exemple d'usage de clavierutils?
@Alexejmagura: Désolé, non. C'est quelque chose que je connais, mais je n'ai jamais utilisé.
public void checkOnOff() { Thread th = new Thread() { public void run() { for (;;) { if (Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)) { jLabel4.setForeground(Color.red); jLabel4.setText("CAPSLOCK is ON"); } else { jLabel4.setText(null); } try { sleep(100); } catch (InterruptedException ex) { Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex); } } } };th.start(); }
Vous pouvez remplacer jlabel4.SetText (votretext) avec system.out.println ()
Veuillez expliquer votre solution également, n'écrivez pas seulement le code.
On dirait que c'était toujours cassé ou au moins depuis Java 1.3 (voir Bug 4414164 ).
Pas sûr pour d'autres plates-formes, mais pour Windows Strard> Je peux dire ceci: la variation de l'état du verrouillage des capsules peut être détectée, mais uniquement si votre client AWT a le focus. Cependant, il y a cette solution de contournement qui fonctionne pour moi: p> contraint: votre application AWT doit avoir l'accent avant d'appeler Remarque: votre robot peut appuyer sur une autre touche qui n'est pas nocive pour votre application. Pourrait dépendre de votre cas d'utilisation. p> p> iScapsLockon code>. P>.
Related: Stackoverflow.com/Questtions/88434/...
Que fonctionne ou ne fonctionnera pas sur votre environnement. Qu'est-ce que c'est? Un environnement d'interface graphique est tout à fait différent de l'environnement de la ligne de commande.
@assylias, oui, a déjà vu cela, il ne fonctionne tout simplement pas pour moi.
@Hot se lèche pas sûr de ce que vous entendez par là, mais voyez mon édition
Pouvez-vous essayer cette paix de code s'il vous plaît: [ICI] [1] [1]: Stackoverflow.com/questions/160315/...
en relation? bugs.sun.com/bugdatabase/view_bug.do?bug_id=4414164
-1 pour ne pas spécifier l'environnement.
@Hotlicks umm. -1 pour vous être stupide? Je ne dis-je pas sûr de ce que vous entendez par là, ce qui signifie s'il vous plaît expliquer plus loin. Vous ne downez pas les gens parce qu'ils vous demandent ce que vous vouliez dire par quelque chose.
@Abdousoft qui fonctionnera bien, la question est que la question est que plus tard dans mon code si je l'appelle à nouveau, cela renvoie toujours la valeur lorsque le programme a été démarré, même si l'état de verrouillage des capuchons a changé.
Êtes-vous en cours d'exécution sous un environnement d'interface graphique? Si oui, lequel? Ou utilisez-vous simplement le programme de la ligne de commande (quel système d'exploitation?) Ou d'un IDE (lequel?)?
@Hotlicks J'étais couru d'Eclipse, sous Windows, mais je ne voulais pas que le système d'exploitation l'affecte (ce qui signifie si vous aviez une solution pour Windows, je voulais qu'il fonctionne sur n'importe quel système d'exploitation)