概述LWJGL抓取鼠标 – debugging应用程序是否挂起或断点与抓取的鼠标碰撞
我有一个LWJGL程序(LWJGL 2.9.0),有时会随机挂起。 deBUGging它的问题是鼠标总是被抓住。 在windows上可以没有任何问题的鼠标,但在linux上(我使用的linux Kubuntu)我知道要回鼠标的唯一方法是停止应用程序。 捕捉鼠标时发生断点时也会发生同样的问题。
使用netbeansdeBUGging模式我可以暂停应用程序并获取一些信息,但是当应用程序挂起鼠标不再有效(没有游标)。 是否有可能在不停止应用程序或仅使用键盘进行deBUGging的情况下返回鼠标?
自动恢复挂起的windows进程
deBUGginglinux进程挂起问题的实用程序?
在virtualenv脚本无限期挂起(python3.5,windows 7的)
软件包刷新内容挂在联系主机:elpa.gnu.org:80
检测终止挂起的应用程序
到目前为止,我已经找到了5个解决方案:
这可能会也可能不会工作,具体取决于您的IDE和 *** 作系统 – 如果您能够切换到IDE窗口,您可以尝试使用键盘快捷方式来暂停执行,然后评估表达式来释放鼠标。 在这种情况下,您需要评估的表达式是Mouse.setGrabbed(false) 。 当断点击中并且鼠标卡在LWJGL窗口中时,这也很有用。 由于我第一次问这个问题,我切换到IntelliJ IDEA所以这里是如何做到这一点在IDE中:alt + u打开“运行”菜单,然后选择“暂停”,然后逐步通过代码一行进一步使用F7或F8 ,然后再次按alt + u并选择“评估表达式”。
配置断点来评估Mouse.setGrabbed(false) 。
或者,您可以设置一个断点,并使用带鼠标的代码应用条件,例如:package 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为tty1),登录并运行命令startx。 这应该启动新的X会话,在tty你在tty8或tty8。 您可以使用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
有时您可能需要将设备重新连接到之前的主设备。
注意:最好在开始调试之前添加新的指针。 我还注意到,一些窗口管理器在使用多个游标时会遇到一些问题,这些问题会导致各种意外的错误 – 例如“键入停止工作”,或者在错误的窗口中键入工作。 所以通常启用多个游标可能不是一个好的选择。
为了完整起见,如果你发现自己陷入困境,拼命地不想停止调试,你可以在你的代码的某个地方添加这个代码片段:
org.lwjgl.input.Mouse.setGrabbed(false);
然后通过调试命令执行它。
例如在Eclipse中:
使用Run>Execute (默认快捷键: Ctrl+U )或Run>display (默认快捷键: Ctrl+Shift+D )
它可能无法正常工作,但可能为您节省调试会话。
[不要忘记再次从代码中删除它;]]
总结
以上是内存溢出为你收集整理的LWJGL抓取鼠标 – debugging应用程序是否挂起或断点与抓取的鼠标碰撞全部内容,希望文章能够帮你解决LWJGL抓取鼠标 – debugging应用程序是否挂起或断点与抓取的鼠标碰撞所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容