Java程序在注册监听器后终止

标签 java listener

互联网上的 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/

相关文章:

java - 不循环选择数组的所有元素

java - 如何在Java中创建动态组合框,单击按钮时添加和删除?

java - 如果是字符串,应该如何使用同步?

java - 图表不会显示

java - 如何使用jasper从jsp生成pdf格式的报告

java.lang.NoSuchMethodError : org/apache/http/conn/scheme/Scheme. <init>(Ljava/lang/String;ILorg/apache/http/conn/scheme/SchemeSocketFactory;)V

java - 每次监听器执行时如何更改面板的图形?

java - Objective-C 委托(delegate)与 Java 监听器

如果在下拉菜单之外点击,Android Spinner 监听器

android - 如何将我的 Android 应用程序添加到共享对话框?