- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个 LWJGL 程序 (LWJGL 2.9.0) 有时会随机挂起。调试的问题是鼠标总是被捕获。在 Windows 上,可以毫无问题地取回鼠标,但在 linux 上(我使用 linux Kubuntu),我知道取回鼠标的唯一方法是停止应用程序。抓取鼠标时遇到断点时会发生同样的问题。
使用 netbeans Debug模式我可以随时暂停应用程序并获取一些信息,但是当应用程序挂起时鼠标不再工作(没有光标)。是否可以在不停止应用程序或仅使用键盘进行调试的情况下取回鼠标?
最佳答案
到目前为止,我已经找到了 5 个解决这个问题的方法:
这可能有效也可能无效,具体取决于您的 IDE 和操作系统 - 如果您能够切换到 IDE 窗口,您可以尝试使用键盘快捷键暂停执行,然后计算表达式 取消抓取鼠标。在这种情况下,您需要评估的表达式是 Mouse.setGrabbed(false)
。这在断点命中并且您的鼠标卡在 LWJGL 窗口中时也很有用。由于我第一次问这个问题,所以我切换到 IntelliJ IDEA,所以这里是如何在该 IDE 中执行此操作:alt+u 打开“运行”菜单,然后选择“暂停”,然后使用 F7 或 F8 进一步单步执行代码一行,然后再次按 alt+u 并选择“评估表达式”。
配置断点以评估 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()
远程调试 - 如果您可以访问第二台机器并且知道在启动程序之前需要远程调试,这是一个很好的解决方案。
在第一台计算机上以 Debug模式启动它并在第二台计算机上附加调试器。
[仅限 linux] 通过启动第二个 X session
使用 ctrl+alt+Fn 切换到 tty1/2/...(例如 tty1 为 ctr+alt+F1),登录并运行命令 startx。这应该启动新的 X session ,在您所在的 tty 中或 tty8 中。您可以使用 ctrl+alt+Fn(通常是 F7 和 F8)在图形环境之间切换。
不幸的是,如果您的应用程序占用太多内存以至于您无法运行第二个 X session ,那么这不是一个好的解决方案。
[仅限 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 grabbed mouse - 如果应用程序挂起或使用抓取的鼠标命中断点时进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795010/
我想检测 Area2D 内的鼠标单击(并按住),然后检测 Area2D 内部或外部的鼠标释放。 这是我目前所拥有的: extends Area2D #PickArea func _input_even
鼠标上的以下按钮在哪里? 编辑: jack 回答后,我在括号中添加了位置。 mouse-1(向左按钮) mouse-2(单击车轮按钮/中间按钮) mouse-3(右键) mouse-4(振铃) mou
这是我的问题;我正在尝试显示“标记”,并在鼠标悬停/移出/单击上进行一些操作。 问题是,根本没有任何事件在over上触发,当在控制台中单击(向下)时,我收到了一些反馈,但不是每个元素的反馈说(目标==
我将从 Textmate 切换到 SublimeText 2。 在 TextMate 中,只需单击行号即可用鼠标为该行添加书签。我这样做已经很多年了,虽然我确信有些人可能更喜欢键盘快捷键,但我不是其中
如何在JavaScript中获取“mouse key up”的按键代码? 如果我按下鼠标左键,那么键码就是一个。 我想在 onmousekeyup 时触发一些代码。但是只要鼠标按下键,这段代码就不会触
我想要实现的是,我想让它像星级评定一样工作。当你进入鼠标时,星星变成黄色,当你离开鼠标时,它变成灰色,然后如果你再次点击它变成黄色。 不知道如何实现它,我添加了代码来向您展示我到目前为止所做的尝试。
我刚刚发现:set mouse=a .令人惊奇的是,它允许我的同事滚动浏览我的 openend 文件。 但事情是这样的:当我左键单击某处时,我真的不希望光标移动。我不想要 :set mouse=a 的
我正在使用官方 highcharts 包装器进行 react 以生成甘特图。我试图从鼠标悬停事件中获取鼠标坐标并将其用于自定义工具提示,但坐标不精确。 例子: https://stackblitz.c
我在 reactjs 上创建了一个简单的组件(一种值选择器:plunker) 现在,我希望隐藏控件的上部和下部 (opacity=0) 并在用户将鼠标悬停在中央 时动画化为 opacity=1 >di
我正在编写一个测试,它在Cuprite::Ferrum上运行,我需要在其中单击一个元素,并将其拖放到页面上另一个元素的下方。当我手动操作时,它工作得很好,但当我尝试将其放在测试中时,它几乎可以工作,但
I want to record mouse and keyboard simultaneously and replay them later. When MIDDLE MOUSE is pr
我为 3d 射击游戏添加了主要用户对象,为其附加了摄像头,并试图在脚本代码中捕捉鼠标移动,附加到玩家游戏对象。但是不能使用Input.GetAxis("Mouse X")、Input.GetAxis(
我是 Unity 脚本的新手,我正在尝试制作 ThirdPersonCamera,所以关注 this tutorial他可以正确上下左右移动鼠标 使用的脚本是 posY += Input.GetAxi
Fotorama slider : slider 设置为 Autoplay="true",效果很好。如何让 slider 在鼠标悬停时暂停,然后在鼠标移开时恢复自动播放?这是我的代码: 最佳答案 v
我在 Windows 窗体中有一个 TreeView 。当我左键单击 TreeView 中的一个节点时,e.Node 显示正确的值,但是当我右键单击同一节点时,e.Node 在 trreview Af
是涉及到寄存器还是缓存内存相关? 我的问题的说明性示例可能很简单,我将鼠标移过我当前正在输入的屏幕。我不点击任何东西,我只是将箭头从左到右、上下移动。 CPU 如何处理鼠标相对于显示器显示的瞬时位置变
用户可以使用一个非常简单的工具(在按住 LMB 的同时移动鼠标)在我的应用程序中绘制草图。这会导致一系列 mousemove 事件,我会在每个事件中记录光标位置。生成的折线曲线往往相当密集,几乎每隔一
我有一些新手问题。 在我的应用程序 (processingjs) 中,我使用 scale() 和 translate() 来允许用户缩放和滚动场景。只要我将比例设置为 1.0,我就没有问题。但是每当我
我正在寻找一个在 XP/Vista/7 中工作的全局鼠标钩子(Hook),它允许我访问鼠标输入的 X、Y 值,并在它们到达 Windows 之前修改这些值...... 我还希望能够在实际鼠标输入之间模
我正在使用mousejoint来拖动box2d中的物体,但这会导致惯性延迟。 是否存在即时拖动 body 的任何方式? 最佳答案 解决方案是在b2MouseJointDef中调整属性frequency
我是一名优秀的程序员,十分优秀!