Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java程序读取Ubuntu 14.04鼠标事件文件(/dev/input/event3)时出错_Java_Events_Ubuntu_Terminal_Mouse - Fatal编程技术网

使用java程序读取Ubuntu 14.04鼠标事件文件(/dev/input/event3)时出错

使用java程序读取Ubuntu 14.04鼠标事件文件(/dev/input/event3)时出错,java,events,ubuntu,terminal,mouse,Java,Events,Ubuntu,Terminal,Mouse,我想通过java编程在Linux终端中处理鼠标事件。我用C++和java编写了两个程序,它们都是相同的程序。 当我用C++编程打开和读取文件(“/DEV/PID/EVET3”)鼠标事件文件时,运行可执行文件时没有问题。 (Ubuntu 14.04终端和Ubuntu服务器14.04--->没有问题) 但是,当我使用java编程打开和读取同一个文件时,在Ubuntu14.04“terminal”中运行可执行结果文件“java-jar program.jar”时出现了一个问题。打开文件时没有错误,但读

我想通过java编程在Linux终端中处理鼠标事件。我用C++和java编写了两个程序,它们都是相同的程序。

当我用C++编程打开和读取文件(“/DEV/PID/EVET3”)鼠标事件文件时,运行可执行文件时没有问题。 (Ubuntu 14.04终端和Ubuntu服务器14.04--->没有问题)

但是,当我使用java编程打开和读取同一个文件时,在Ubuntu14.04“terminal”中运行可执行结果文件“java-jar program.jar”时出现了一个问题。打开文件时没有错误,但读取文件时会出现如下错误:

但是,当我在Ubuntu服务器14.04上运行相同的jar文件时,没有错误,程序运行得很好。 我如何解决这个问题?(问题=在Ubuntu 14.04上运行java程序,没有错误。)我想问题与Ubuntu GUI和JDK有关,但不知道如何解决这个问题。 我的java程序代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;

public class m {

    public static void main(String[] args) {

        File f = new File("/dev/input/event3");
        FileInputStream is = null;
        try {
            is = new FileInputStream(f);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        byte[] bytes = new byte[16];
        while(true){
            try 
            {
                is.read(bytes);
            } catch (IOException e) 
            {
                e.printStackTrace();   //-------> error while run on Ubuntu 14.04 and no error on Ubuntu server
            }
            System.out.println(Arrays.toString(bytes));
        }
    }
}

检查缓冲区大小是否正确。 在最近的Linux内核中,input_事件结构的大小取决于许多因素,但主要取决于cpu体系结构。声明如下:

struct input_event {
      struct timeval time;
      __u16 type;
      __u16 code;
      __s32 value;
};
在32位系统上,很可能接受缓冲区大小(16字节)

在64位系统上,缓冲区很可能不小于24字节。原因是timeval结构占用的空间是32位系统的两倍(多8字节)


我还没有找到一种可靠的方法从Java获取输入事件结构大小,我个人使用JNI来实现这一点。

非常感谢。这是事实。
struct input_event {
      struct timeval time;
      __u16 type;
      __u16 code;
      __s32 value;
};