互联网上的 friend 们大家好!
我的 java 代码有问题,我确信这只是一个初学者错误,但我不太明白问题是什么。
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Random;
public class MultiThreadChatClient
{
private static Socket clientSocket = null;
private static PrintStream os = null;
private static boolean closed = false;
private static void start()
{
int portNumber = 2222;
String host = "localhost";
System.out.println("Host=" + host + ", port=" + portNumber);
try
{
clientSocket = new Socket(host, portNumber);
os = new PrintStream(clientSocket.getOutputStream());
os.println("KeyListener ID: " + new Random().nextInt());
}
catch (UnknownHostException e)
{
System.err.println("Finner ikke hosten " + host);
}
catch (IOException e)
{
System.err.println("Error, fant ingen åpen server på " + host);
}
if ( clientSocket == null || os == null )
{
closed = true;
}
Listener.startListener();
}
public void stop()
{
closed = true;
os.close();
try
{
clientSocket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void send(String msg)
{
if (!closed)
{
os.println(msg);
}
}
public static void main( String[] args )
{
start();
}
}
还有类(class):
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
import org.jnativehook.mouse.NativeMouseEvent;
import org.jnativehook.mouse.NativeMouseInputListener;
import org.jnativehook.mouse.NativeMouseWheelEvent;
import org.jnativehook.mouse.NativeMouseWheelListener;
public class Listener implements NativeKeyListener, NativeMouseInputListener, NativeMouseWheelListener
{
public void nativeKeyPressed(NativeKeyEvent e)
{
MultiThreadChatClient.send(NativeKeyEvent.getKeyText(e.getKeyCode()));
}
public void nativeKeyReleased(NativeKeyEvent e)
{
}
public void nativeKeyTyped(NativeKeyEvent e)
{
}
public void nativeMouseClicked(NativeMouseEvent e)
{
}
public void nativeMousePressed(NativeMouseEvent e)
{
}
public void nativeMouseReleased(NativeMouseEvent e)
{
}
public void nativeMouseMoved(NativeMouseEvent e)
{
}
public void nativeMouseDragged(NativeMouseEvent e)
{
}
public void nativeMouseWheelMoved(NativeMouseWheelEvent e)
{
}
public static void startListener()
{
try
{
GlobalScreen.registerNativeHook();
}
catch (NativeHookException ex)
{
System.err.println("Et problem oppsto.");
System.err.println(ex.getMessage());
System.exit(1);
}
Listener listener = new Listener();
GlobalScreen.getInstance().addNativeKeyListener( listener );
GlobalScreen.getInstance().addNativeMouseListener( listener );
GlobalScreen.getInstance().addNativeMouseMotionListener( listener );
GlobalScreen.getInstance().addNativeMouseWheelListener( listener );
}
}
我的问题是,在 Listener 类中注册关键监听器后,程序立即以代码“0”终止。
它曾经一直有效,直到我做了某件事,现在它只是在启动时终止。我尝试启动一个线程只是为了让程序保持 Activity 状态,这有效,但没有一个监听器工作。
提前谢谢您!
更新:
我尝试使用 https://code.google.com/p/jnativehook/wiki/examples 中的 exampleclass但事件不再起作用了?!
与上面的问题相同。我的类(上面的类)和示例类都曾经工作过,但现在它们都在注册监听器后终止(示例类中的 main 方法)
是我的 eclipse 还是哪里出了问题?
最佳答案
在不运行代码的情况下,我的猜测是jvm的“主”线程启动了监听器,但随后没有阻塞,它退出了“主”方法。
关于Java程序在注册监听器后终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975079/