如果我将鼠标移到Task.Run(() =>
{
using(var ms = new MemoryStream())
{
/* capture ms and process the stream */
}
}
内,javax.swing.JFrame
会停止调用javax.swing.Timer
方法,直到鼠标停止移动。只有当我用我的Rocket Kone XTD鼠标移动光标时才会发生这种情况。当我使用我的触控板时,一切都很好。
我该如何解决?我正在使用macOS Sierra。
这是我的代码:
actionPerformed()
想知道我在说什么:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;
public class Mouse {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setVisible(true);
Timer timer = new Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("foo");
}
});
timer.start();
}
}
如果鼠标没有移动,输出看起来像这样: 11真的 13真的 13真的 10真实 12真的 13真的 12真的 13真的 10真实。
当鼠标移动(快速)时,没有输出。当鼠标停止移动时,输出为:2406为真(取决于我移动鼠标的时间长度)。
如果鼠标移动缓慢,输出如下:17为真 5真的 8真实 16真实 4真实 11真的 16真实 44真实 11真的 28真的 48真的 77真的 11真的 7真的 15真的 8真实 9真的 12真的 24真的 13真的 4真实 12真的 32真实 13真的 8真实 8真实 13真的 10真实 15是的。
答案 0 :(得分:0)
我解决了这个问题,因为我将鼠标的轮询率从1000Hz降低到500Hz。现在一切都很完美。我认为问题在于UI-Thread过度扩展,每秒处理1000个民意调查,所以忙于处理Timer
。