2009-11-19 3 views

ответ

3

В принципе да, но для этого потребуется некоторый код C и JNI для привязки к Java. Если вам повезет, возможно, уже кто-то уже создал подходящую библиотеку для интересующей вас ладони.

Итог: если это можно сделать на C, вы можете подключить это к Java.

+0

@djna, спасибо за ответ. Я искал такую ​​библиотеку java, но напрасно. –

+0

@Sigh - вам понадобится родная библиотека, которая соответствует вашей ОС и аппаратной среде. Часть JNI не волшебна, в сети есть несколько обучающих программ. –

4

Возможна альтернатива.

Я делаю что-то подобное: в приложении я отслеживаю 4 мыши для кликов. Эти клики генерируют прерывания, но я достаточно доволен, чтобы не обращаться с ними напрямую с Java.

В Linux, оказывается, есть файлы устройств (/dev/input/mouse#), которые извергают кучу символов, когда что-то происходит с мышью. У меня есть Thread для каждого из них с блокировкой FileReader при чтении. Как только символы прибывают, поддерживающий поток разблокируется, и я могу делать любую обработку, которая мне нравится.

Итак, идея: если возможно, найдите способ получить драйвер устройства, чтобы сделать данные доступными для вас в форме файла/устройства, затем вы можете получить к нему доступ из Java, используя только вызовы ввода-вывода из библиотеки Java, нет странного битового кода и C требуется между ними.

1

Это paper, обрабатывающий ту же тему. И вы можете взглянуть на SWT, я думаю, что они также имеют дело с аппаратными прерываниями, хотя они могут полагаться на API операционных систем.

0

Это стандарт встроенной Java-технологии реального времени. перейдите на сайт www.ajile.com или systrmonx.com и купите оценочную карточку.

Встраиваемая java is не стандарт на ПК. вы можете получить Java в реальном времени на ПК, но не встроенный бит.

0

Посмотрите на Swig. Java implementation имеет Directors, что позволит вам звонить на Java из C/C++.

Я использовал эту технологию для обработки прерываний, вызывающих C#, и он отлично работал. Не должно сильно отличаться от Java.

2

Если вы хотите напрямую реагировать на прерывание от Java, то виртуальной машине придется запускать в пространстве ядра (или в некоторых системах с драйверами пользовательского пространства в контексте драйвера). JamaicaVM работает в этом режиме на некоторых RTOS, таких как Thread-X или VxWorks, как DKM. Следующий выпуск RTSJ будет поддерживать подпрограммы обработки прерываний на Java.

RTSJ может использоваться для запуска обработчиков прерываний второго уровня даже в пространстве пользователя. Для этого требуется небольшой драйвер устройства, который либо отправляет сигнал POSIX в виртуальную машину, либо предоставляет интерфейс персонального устройства, где один поток в блоках виртуальной машины блокируется при чтении устройства. В первом случае AsyncEventHandler может быть связан с сигналом POSIX. Во втором случае протекторы, которые блокируются при считывании устройства, могут запускать AsyncEvent каждый раз, когда байт считывается с устройства. Тогда любой AsyncEventHandler, подключенный к AsyncEvebt, будет выпущен.

Если вы хотите попробовать это под Linux, вы можете скачать личную версию JamaicaVM: «http://www.aicas.com/jamaica-pe.html». JamaicaVM имеет сборщик мусора в реальном времени, и код может быть скомпилирован статически, чтобы обеспечить производительность в реальном времени. Это другая модель развертывания, чем обычная JVM.

Смежные вопросы