java – LWJGL抓取鼠标 – 如果应用程序挂起或使用抓取的鼠标点击断点时调试
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – LWJGL抓取鼠标 – 如果应用程序挂起或使用抓取的鼠标点击断点时调试,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4015字,纯文字阅读大概需要6分钟。
内容图文
![java – LWJGL抓取鼠标 – 如果应用程序挂起或使用抓取的鼠标点击断点时调试](/upload/InfoBanner/zyjiaocheng/818/ae78b49105c649cfa9c3543ee651c6a6.jpg)
我有一个LWJGL程序(LWJGL 2.9.0),有时随机挂起.调试它的问题是总是抓住鼠标.在Windows上可以没有任何问题地返回鼠标,但在linux上(我使用Linux Kubuntu)我知道回鼠的唯一方法是停止应用程序.当抓取鼠标时断点发生时会发生同样的问题.
使用netbeans调试模式我可以随时暂停应用程序并获取一些信息,但是当应用程序挂起鼠标时不再有效(没有光标).是否可以在不停止应用程序或仅使用键盘进行调试的情况下恢复鼠标?
解决方法:
到目前为止,我已找到5个解决此问题的方法:
>根据您的IDE和操作系统,这可能会也可能不起作用 – 如果您能够切换到IDE窗口,您可以尝试使用键盘快捷键暂停执行,然后评估表达式以取消鼠标.在这种情况下,您需要评估的表达式是Mouse.setGrabbed(false).当断点命中并且鼠标卡在LWJGL窗口内时,这也很有用.自从我第一次提出这个问题后,我切换到了IntelliJ IDEA,所以这里是如何在IDE中执行此操作:打开“运行”菜单,然后选择“暂停”,然后使用F7或F8进一步逐行执行代码,然后再次按alt u并选择“evaluate expression”.
>配置断点以评估Mouse.setGrabbed(false).
或者,您可以设置断点并应用具有取消鼠标的代码的条件,例如:
包com.acne;
import org.lwjgl.input.Mouse;
public class DebugHelper {
public static boolean restoreMouse() {
Mouse.setGrabbed(false);
return true;
}
}
然后将断点条件设置为com.acne.DebugHelper.restoreMouse()
>远程调试 – 如果您可以访问第二台计算机并且在启动程序之前知道需要远程调试,那么这是一个很好的解决方案.
在第一台计算机上以调试模式启动它并将调试器连接到第二台计算机上.
> [仅限linux]通过启动第二个X会话
切换到tty1 / 2 / …使用ctrl alt Fn(例如ctr alt F1 for tty1),登录并运行命令startx.这应该开始新的X会话,你在tty或tty8的tty.您可以使用ctrl alt Fn(通常为F7和F8)在图形环境之间切换.
不幸的是,如果您的应用程序占用大量内存而无法运行第二个X会话,则这不是一个好的解决方案.
> [仅限linux]您可以添加第二个鼠标指针.您的LWJGL(或OpenGL)应用程序将只抓取一个鼠标指针,您将拥有第二个鼠标指针.
不幸的是,大多数窗口管理器并不正式支持多个鼠标指针,但这并不意味着它不起作用.它确实有效,但有一些烦人的故障.
您可以使用xinput添加第二个鼠标指针:
>运行xinput create-master pointer-name.第二个鼠标指针应出现在屏幕上.这会创建键盘/指针对,您无需对第二个添加的键盘执行任何操作.它不会附加到任何物理设备.
>运行xinput list列出所有设备
在我的笔记本电脑上看起来像这样:
? Virtual core pointer id=2 [master pointer (3)]
? ? Virtual core XTEST pointer id=4 [slave pointer (2)]
? ? ETPS/2 Elantech Touchpad id=14 [slave pointer (2)]
? ? A4Tech USB Mouse id=11 [slave pointer (2)]
? Virtual core keyboard id=3 [master keyboard (2)]
? Virtual core XTEST keyboard id=5 [slave keyboard (3)]
? Power Button id=6 [slave keyboard (3)]
? Video Bus id=7 [slave keyboard (3)]
? Video Bus id=8 [slave keyboard (3)]
? Power Button id=9 [slave keyboard (3)]
? Lenovo EasyCamera id=10 [slave keyboard (3)]
? Ideapad extra buttons id=12 [slave keyboard (3)]
? AT Translated Set 2 keyboard id=13 [slave keyboard (3)]
? new-mouse pointer id=15 [master pointer (16)]
? ? new-mouse XTEST pointer id=17 [slave pointer (15)]
? new-mouse keyboard id=16 [master keyboard (15)]
? new-mouse XTEST keyboard id=18 [slave keyboard (16)]
新添加的鼠标指针(主设备)的id = 15.我有一个触摸板和一个外接鼠标,所以我可以将其中一个连接到新光标,另一个连接到旧光标.如果您没有2个物理设备 – 您可以保留未连接物理设备的旧指针.
>现在运行xinput reattach slave-device-id master-device-id.例如,如果我想将触摸板连接到新指针:xinput reattach 14 15
在此之后,您应该能够控制新添加的指针.
>当你不再需要第二个鼠标指针时,使用xinput remove-master master-device-id,在我的例子中它将是xinput remove-master 15
>有时您可能需要将设备重新连接到以前的主设备.
注意:最好在开始调试之前添加新指针.
我还注意到一些窗口管理器有一些问题,多个游标会导致各种意外错误 – 例如“打字停止工作”,或键入工作,但在错误的窗口.因此,正常启用多个游标可能不是一个好选择.
内容总结
以上是互联网集市为您收集整理的java – LWJGL抓取鼠标 – 如果应用程序挂起或使用抓取的鼠标点击断点时调试全部内容,希望文章能够帮你解决java – LWJGL抓取鼠标 – 如果应用程序挂起或使用抓取的鼠标点击断点时调试所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。