Multi-touch кросс-платформенный Java-приложение (Windows, Mac и Linux (Ubuntu) (возможно, Android))

Я пытаюсь добавить multi-touch к существующему проекту кросс-платформы java. Я рассмотрел два способа. Было несколько других способов, но они, казалось, не были перекрестной платформой или нуждались в специальном программном обеспечении.

  • JavaFx - рабочие события gesturing/touchhevent на окнах и osx, но не функционирующие на Ubuntu 16.04.
  • MT4J - выглядит прекращенным и/или неподдерживаемым.

Мои выводы для вышеизложенного могут быть неправильными, и я готов попробовать их снова, получив хорошие отзывы.

Есть ли все-таки для достижения кросс-платформенного приложения с несколькими касаниями java? Кажется, мне, возможно, потребуется написать собственный код и добавить его через JNI, который, похоже, много работает. Любые идеи по этой линии мысли?. Обратная связь приветствуется, спасибо.

Продолжение 1.0:

Я продолжал расследовать использование JavaFX в Linux, главным образом потому, что единственным недостатком прямо сейчас для использования JavaFX является поддержка multitouch от linux. Я обнаружил, что JavaFx multitouch действительно работает с дистрибутивами Linux, предназначенными для встроенных систем (например, Raspberry Pi, возможно, наиболее честным). Из этого я могу собрать, если OpenJFX может быть скомпилирован для встроенной системы, тогда встроенная версия OpenJFX напрямую использует драйверы устройств для ввода ввода (/dev/input/) вместо X11/GTK. Поскольку Linux для рабочего стола использует X11/GTK для входа в среду рабочего стола, JavaFx не может получить эти события из-за отсутствия поддержки.

Я не хочу использовать ссылку, но здесь она

https://wiki.openjdk.java.net/display/OpenJFX/Building+the+OpenJFX+embedded+stack+for+Linux+desktop

В приведенной выше ссылке мне представляется, по крайней мере, вопрос о компиляции версии систем OpenJFX для x86 (должен работать x64), которая использует встроенные системы для получения ввода устройства. Я могу скомпилировать эту версию, но при запуске она, похоже, разбивает Рабочий стол, и иногда он оставляет приложение Java. Когда приложение Java остается запущенным, события touch работают, но этот результат просто неприемлем, поскольку он непредсказуем и, похоже, разбивает диспетчер рабочего стола (после этого требуется перезагрузка рабочего стола).

Продолжение 1.1:

Я изучил использование TUIO, но ни одна из примеров программ не работала. Говорят, что вам нужно устройство для включения TUIO, которое может быть специальным стандартным /protocal, которое мои устройства не используют. Довольно просто загрузили демо-версию TUIO и без проблем повезли ее на сенсорный экран.

Я также подумал о подключении xev к окну Java-приложения и потоковой передаче результатов в файл, который должен быть прочитан java-приложением и проанализирован в java-событиях. Это кажется довольно взломанным, и я не уверен, что это даже сработает. Если кто-то выложит возможность этой работы, я могу попробовать. Но на данный момент это похоже на работу.

Продолжение 1.2:

Нашел это https://bugs.openjdk.java.net/browse/JDK-8090954 и подумал, что это интересно.

Отправлено решение ниже.

Ответы

Ответ 1

В последнее время было много кроссплатформенных проектных генераторов

Реагировать на родной, Кордовы - некоторые из тех

Я использовал React Native. Он использует javascript-коды, которые скомпилированы в соответствии с платформой

У React native есть поддержка программирования Gesture Control

https://facebook.github.io/react-native/docs/gesture-responder-system.html

вы можете также взаимодействовать с частью кода реакции с существующим JAVA-кодом для приложения, которое вы уже написали

https://facebook.github.io/react-native/docs/integration-with-existing-apps.html

Ответ 2

Решение заключалось в том, чтобы использовать TUIO и рулон нашей собственной библиотеки Multi-Touch. Трюк начинался с TUIOClient и запускался на сервере TUIO. TUIOClient прослушивает данный порт, а сервер TUIO пересылает события ОС на порт, который прослушивает клиент TUIO.

Я использовал сервер mtdev2tuio (выходной мост) для linux и запускал его вместе с клиентом TUIO.

Пример потока:

1.) TUIOClient, прослушивающий порт x

2.) TUIOServer пересылает события TUIO в порт x из событий os y

Linux:

1.) новый TUIOClient (3333)

2.)./mtdev2tuio/dev/input/event5 osc.udp://127.0.0.1: 3333

Решение не является идеальным, но оно работает и должно поддерживать мультитач на любом устройстве, если есть сервер TUIO (Output Bridge). Другим недостатком является то, что нужно фиксировать штрихи и интерпретировать их в жесты. Также обратите внимание, в зависимости от того, как оно развивается, диктует, как вы используете его в разных рамках. Наши должны будут использоваться в Swing/JavaFX.