Есть несколько способов взаимодействия между Java и Windows. Упорядочены по силе и сложности:
- Для обработки оконных сообщений вы можете использовать Jawin - в нем даже есть демонстрация того, как обрабатывать оконные сообщения - или что-то подобное. Конечно, если вы связываете свою Java-программу с библиотекой, такой как Jawin, она никогда не будет работать на компьютере, отличном от Windows
- Для простого взаимодействия между Win32 и Java мой любимый выбор - сокет, привязанный к прослушиванию только на localhost. Протокол может быть простым, но я бы предпочел простой текстовый протокол для упрощения отладки. Имейте в виду, что соединение с сокетом может прерваться, если пользователь завершит программу.
- Вы можете использовать (локальные) веб-сервисы, как предложено в других сообщениях здесь. С обеих сторон убедитесь, что вы используете ваши библиотеки Webservice / XML для создания и анализа сообщений, слишком просто создать искаженный XML, если вы выполните конкатенацию строк.
- Вы можете поместить функциональность своей программы Windows в компонент COM и использовать мост Java-COM-COM: Jacob или j-Interop являются популярными бесплатными библиотеками для этого, j-Integra кажется популярным выбором для компаний с устаревшими системами. .
- Вы можете поместить функциональность вашей Java-программы в COM-компонент и использовать мост Sun-Java-ActiveX от Sun. Исходя из моего личного опыта, это довольно неловкий вариант: разработка моста Java-ActiveX остановилась с версии 1.4, установка ActiveX приводит к установке компонента Java где-то в каталоге JRE и отладке компонентов Java внутри контейнера ActiveX. довольно громоздко.
Sidenote: если вы имеете дело со строками с обеих сторон, всегда учитывайте, что Java обрабатывает строки как нечто совершенно отличное от байтовых массивов. Особенно если вы используете строки ANSI Windows, имейте в виду, что символы 81, 8D, 8F, 90 и 9D определены как неопределенные в кодовой странице Windows-1252, поэтому Java будет выдавать вопросительные знаки или исключения, если строки Windows содержат эти элементы. Поэтому, если это вообще возможно, используйте строки WChar на стороне Windows или ограничьтесь безопасными символами.