如何在保持事件 运行ning 的同时 运行 循环?
How do I run loops while keeping events running?
我对将事件用于 运行 循环有疑问,因为这样做似乎会锁定线程。例如,我有一个 nativeMousePressed 和 nativeMouseReleased 事件,我试图在按下鼠标时连续执行一些代码,然后在释放鼠标时停止。我试图通过在另一个管理器 class 中创建一个静态布尔变量,然后在按下鼠标时将其设置为 true 并在释放鼠标时将其设置为 false 来做到这一点。然后我决定制作一个 while 循环,该循环从使用我之前谈到的布尔值的 nativeMousePressed 事件内部调用。问题在于,当 while 循环为 运行ning 时,无法调用任何事件,这意味着布尔值永远不会变为 false,从而创建无限循环。我怎样才能 运行 while 循环同时保持事件 运行ning 呢?
我认为这与线程被锁定有关,但我还没有处理过这样的事情,希望得到一些帮助来弄清楚如何运行 并行处理这两个事情。
public class NativeMouseEvent implements NativeMouseListener {
Program program = new Program();
@Override
public void nativeMouseClicked(org.jnativehook.mouse.NativeMouseEvent e) {
}
@Override
public void nativeMousePressed(org.jnativehook.mouse.NativeMouseEvent e) {
if(e.getButton() == 1 && Controller.threeClicked) {
Controller.fixAim = true;
program.start();
}
}
@Override
public void nativeMouseReleased(org.jnativehook.mouse.NativeMouseEvent e) {
program.interrupt();
Controller.fixAim = false;
}
}
这是我的第二个主题 运行ning...
public class Program extends Thread {
public void run() {
while(Controller.fixAim) {
System.out.println("test");
}
}
这是我的第二次尝试,它也给了我一个错误,说 this.program 是空的。
public class NativeMouseEvent implements NativeMouseListener {
Program program;
@Override
public void nativeMouseClicked(org.jnativehook.mouse.NativeMouseEvent e) {
}
@Override
public void nativeMousePressed(org.jnativehook.mouse.NativeMouseEvent e) {
if(e.getButton() == 1 && Controller.threeClicked) {
Controller.fixAim = true;
if(program != null) {
program = new Program();
program.start();
}
}
}
@Override
public void nativeMouseReleased(org.jnativehook.mouse.NativeMouseEvent e) {
program.interrupt();
program = null;
Controller.fixAim = false;
}
}
鼠标按下开始踩踏,鼠标抬起停止踩踏。在跟帖中画圆
类似于下面的 java 代码。注意:这只是一个例子。您需要进行更改才能使其在您的 android 环境中运行。
public class Test {
Thread drawTask;
public void mouseDown() {
drawTask = new Thread(()-> {
int i = 0;
try {
for(;;) {
System.out.print("\rDrawing circle " + i++);
Thread.sleep(500);
}
} catch(InterruptedException e) {
System.out.println("finished drawing circle.");
}
});
drawTask.start();
}
public void mouseUp() {
if(drawTask != null) {
drawTask.interrupt();
drawTask = null; //<--- make sure you do this
}
}
public static void main(String[] args) {
Test test = new Test();
Scanner in = new Scanner(System.in);
System.out.println("type anything and press Enter to simulate mouse down/up");
in.next();
test.mouseDown();
in.next();
test.mouseUp();
in.next();
in.close();
}
}
我对将事件用于 运行 循环有疑问,因为这样做似乎会锁定线程。例如,我有一个 nativeMousePressed 和 nativeMouseReleased 事件,我试图在按下鼠标时连续执行一些代码,然后在释放鼠标时停止。我试图通过在另一个管理器 class 中创建一个静态布尔变量,然后在按下鼠标时将其设置为 true 并在释放鼠标时将其设置为 false 来做到这一点。然后我决定制作一个 while 循环,该循环从使用我之前谈到的布尔值的 nativeMousePressed 事件内部调用。问题在于,当 while 循环为 运行ning 时,无法调用任何事件,这意味着布尔值永远不会变为 false,从而创建无限循环。我怎样才能 运行 while 循环同时保持事件 运行ning 呢?
我认为这与线程被锁定有关,但我还没有处理过这样的事情,希望得到一些帮助来弄清楚如何运行 并行处理这两个事情。
public class NativeMouseEvent implements NativeMouseListener {
Program program = new Program();
@Override
public void nativeMouseClicked(org.jnativehook.mouse.NativeMouseEvent e) {
}
@Override
public void nativeMousePressed(org.jnativehook.mouse.NativeMouseEvent e) {
if(e.getButton() == 1 && Controller.threeClicked) {
Controller.fixAim = true;
program.start();
}
}
@Override
public void nativeMouseReleased(org.jnativehook.mouse.NativeMouseEvent e) {
program.interrupt();
Controller.fixAim = false;
}
}
这是我的第二个主题 运行ning...
public class Program extends Thread {
public void run() {
while(Controller.fixAim) {
System.out.println("test");
}
}
这是我的第二次尝试,它也给了我一个错误,说 this.program 是空的。
public class NativeMouseEvent implements NativeMouseListener {
Program program;
@Override
public void nativeMouseClicked(org.jnativehook.mouse.NativeMouseEvent e) {
}
@Override
public void nativeMousePressed(org.jnativehook.mouse.NativeMouseEvent e) {
if(e.getButton() == 1 && Controller.threeClicked) {
Controller.fixAim = true;
if(program != null) {
program = new Program();
program.start();
}
}
}
@Override
public void nativeMouseReleased(org.jnativehook.mouse.NativeMouseEvent e) {
program.interrupt();
program = null;
Controller.fixAim = false;
}
}
鼠标按下开始踩踏,鼠标抬起停止踩踏。在跟帖中画圆
类似于下面的 java 代码。注意:这只是一个例子。您需要进行更改才能使其在您的 android 环境中运行。
public class Test {
Thread drawTask;
public void mouseDown() {
drawTask = new Thread(()-> {
int i = 0;
try {
for(;;) {
System.out.print("\rDrawing circle " + i++);
Thread.sleep(500);
}
} catch(InterruptedException e) {
System.out.println("finished drawing circle.");
}
});
drawTask.start();
}
public void mouseUp() {
if(drawTask != null) {
drawTask.interrupt();
drawTask = null; //<--- make sure you do this
}
}
public static void main(String[] args) {
Test test = new Test();
Scanner in = new Scanner(System.in);
System.out.println("type anything and press Enter to simulate mouse down/up");
in.next();
test.mouseDown();
in.next();
test.mouseUp();
in.next();
in.close();
}
}