2015-03-31 3 views
0

В настоящее время у меня есть панель N-Trig Multitouch, подключенная к файлу события/dev/input/event4, и я пытаюсь загрузить this. Я включил всех туземцев и т. Д. В java.library.path, но получаю эту ошибку даже в случае суперпользователя. Исключение:Java/dev/input/eventX

java.io.IOException: Invalid argument 
    at sun.nio.ch.FileDispatcherImpl.read0(Native Method) 
    at sun.nio.ch.FileDispatcherImpl.read(FileDispatcherImpl.java:46) 
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) 
    at sun.nio.ch.IOUtil.read(IOUtil.java:197) 
    at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:149) 
    at com.dgis.input.evdev.EventDevice.readEvent(EventDevice.java:269) 
    at com.dgis.input.evdev.EventDevice.access$1(EventDevice.java:265) 
    at com.dgis.input.evdev.EventDevice$1.run(EventDevice.java:200) 
EVENT: null 
Exception in thread "Thread-0" java.lang.NullPointerException 
    at com.asdev.t3.Bootstrap$1.event(Bootstrap.java:41) 
    at com.dgis.input.evdev.EventDevice.distributeEvent(EventDevice.java:256) 
    at com.dgis.input.evdev.EventDevice.access$2(EventDevice.java:253) 
    at com.dgis.input.evdev.EventDevice$1.run(EventDevice.java:201) 

Кто-нибудь знает, почему это происходит? Спасибо

ответ

1

Я ответил на этот вопрос по проекту issues page.

по attilapara
Привет, я пытался использовать эту библиотеку на Raspberry Pi и я получил тот же исключение, но я выяснил источник проблемы и удалось получить его работу. В основном проблема заключается в том, что эта библиотека имеет значение , написанное только для 64-битного процессора/ОС. Объяснение:

input_event структура выглядит следующим образом (источник):

struct input_event { 
    struct timeval time; 
    unsigned short type; 
    unsigned short code; 
    unsigned int value; 
}; 

Здесь мы имеем формата: первый формат, который имеет следующие элементы (источник):

time_t   tv_sec  seconds 
suseconds_t tv_usec  microseconds 

Эти два типа будут представлены по-разному на 32-битной и 64-битной системе .

Решение:

  1. Изменить размер input_event от 24 до 16 байт:

изменение линии 34 исходного файла evdev-Java/SRC/COM/DGIS/ввода/evdev/InputEvent.java из этого:

public static final int STRUCT_SIZE_BYTES = 24; to this: 

    public static final int STRUCT_SIZE_BYTES = 16; Change the parse function in the same source file as follows: 

public static InputEvent parse(ShortBuffer shortBuffer, String source) throws IOException { 
    InputEvent e = new InputEvent(); 
    short a,b,c,d; 

    a=shortBuffer.get(); 
    b=shortBuffer.get(); 
    //c=shortBuffer.get(); 
    //d=shortBuffer.get(); 
    e.time_sec = (b<<16) | a; //(d<<48) | (c<<32) | (b<<16) | a; 
    a=shortBuffer.get(); 
    b=shortBuffer.get(); 
    //c=shortBuffer.get(); 
    //d=shortBuffer.get(); 
    e.time_usec = (b<<16) | a; //(d<<48) | (c<<32) | (b<<16) | a; 
    e.type = shortBuffer.get(); 
    e.code = shortBuffer.get(); 
    c=shortBuffer.get(); 
    d=shortBuffer.get(); 
    e.value = (d<<16) | c; 
    e.source = source; 

    return e; 
}