Это может быть больно, но вы можете использовать подписанный Java-апплет .Подписанные Java-апплеты могут иметь полный доступ к системе пользователя.
Java не имеет встроенной поддержки USB, поэтому вам, вероятно, потребуется развернуть свой собственный JNI интерфейск собственным API-интерфейсам USB.
Использование JNI в апплете может быть сложным.Я делал это раньше.Если вы просматриваете эту тему в Google, в большинстве результатов говорится «не делайте этого» или «вы не можете этого сделать».Ну, вы можете сделать это.
Вот как я это сделал: я упаковал нативные библиотеки (DLL и т. Д.) Внутри JAR апплета, а затем прочитал нативные библиотеки из JAR, используя, например, getResourceAsStream .Затем я записал библиотеки в соответствующее место на диске (например, $ {user.home} /. Myapp /.) Затем я использовал System.load для загрузки библиотеки JNI.
Возможны проблемы ClassLoader с библиотеками и апплетами JNI.Проблемы тонкие и их трудно объяснить.Они в основном связаны с тем фактом, что JVM может загружать и привязывать определенную библиотеку JNI только один раз для каждого экземпляра виртуальной машины, но апплеты часто создаются, часто с собственным новым ClassLoader, что может быть проблематично.Работа, проделанная Sun над разделением процессов в плагине браузера следующего поколения , возможно, разрешила некоторые из этих проблем, но ваши пользователи будут иметь это только в том случае, если они используют Java 1.6.0_10 или более позднюю версию.
Можно также использовать JNA в подписанном апплете.Я бы не рекомендовал использовать JNA для прямого доступа к USB API.Но иногда JNA помогает сэкономить время на доступ к простым встроенным функциям.Хотя после настройки инфраструктуры JNI JNA, вероятно, будет иметь меньшее значение.
Вот еще несколько случайных мыслей:
- Java WebStart - может быть запущен избраузер, но работает вне браузера
- Microsoft ClickOnce - может быть запущен из браузера, но работает вне браузера
- Flash / AIR - не может выйти из своей песочницы