java - 如何向正在运行的 Java 程序发送命令?

标签 java winapi ipc

我有一个 Java 程序,我想从我的 Win32 应用程序发送一个命令。通常我会使用 WM_COPYDATA 但我对 Java 有哪些选择?

最佳答案

有一些方法可以在 Java 和 Windows 之间进行互操作。按功率和难度排序:

  • 要处理窗口消息,您可以使用 Jawin - 它甚至具有 demo of how to handle window messages - 或类似的东西。当然,如果你将你的 Java 程序绑定(bind)到像 Jawin 这样的库,它永远不会在非 Windows 机器上运行
  • 对于 Win32 和 Java 之间的简单交互,我最喜欢的选择是绑定(bind)到只在本地主机上监听的套接字。该协议(protocol)可能很简单,但我更喜欢纯文本协议(protocol)以便于调试。请注意,如果用户终止程序,套接字连接可能会中断。
  • 您可以使用(本地)网络服务,就像此处其他帖子中所建议的那样。双方都确保使用 Web 服务/XML 库来构造和解析消息,如果进行字符串连接,很容易构造格式错误的 XML。
  • 您可以将 Windows 程序的功能放入 COM 组件并使用 Java 到 COM 的桥梁:Jacob 或 j-Interop 是流行的免费库,j-Integra 似乎是使用遗留系统的企业的流行选择.
  • 您可以将 Java 程序的功能放入 COM 组件中并使用 Sun 的 Java-ActiveX 桥。根据我的个人经验,这是一个相当尴尬的选择:Java-ActiveX 桥的开发自 1.4 以来就停滞不前,ActiveX 的安装导致您的 Java 组件安装在 JRE 目录中的某个位置并在 ActiveX 容器中调试您的 Java 组件比较麻烦。

旁注:如果您在两端都处理字符串,请始终考虑到 Java 将字符串作为与字节数组完全不同的方式处理。特别是如果您使用的是 Windows ANSI 字符串,请注意字符 81、8D、8F、90 和 9D 在 Windows-1252 代码页中被指定为未定义,因此如果您的 Windows 字符串包含这些元素,Java 将产生问号或异常。因此,如果可能的话,请在 Windows 端使用 WChar 字符串或限制您使用安全字符。

关于java - 如何向正在运行的 Java 程序发送命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042705/

相关文章:

c++ - 让我的图标工作

c++ - 为什么没有 InterlockedExchange Subtract 64?

python - 如何在 Linux 上快速将大数据从 C++ 发送到 Python?

java - Gradle:Jar Task不包括扩展名未知的文件

java - 使用 Maven 自动验证 JavaDoc

.net - user32.dll FlashWindow 的托管替代品

arm - 基于 remoteproc 的内核间通信

iPad 和内存问题

java - 缺少一些东西来完成我的程序

java - 终止 Java RMI 服务器应用程序