Java 访问网桥 (JAB) - 无法获取有效响应



我知道关于这个主题的几个现有问题,但它们要么没有答案,要么答案对我不起作用,所以我在这里再试一次。

我正在尝试在WinForms C#项目中使用Java Access Bridge API。Java Ferret 和 Java Monkey 都工作正常,这告诉我桥已经安装并且至少能够运行。 但是,当我尝试在自己的代码中运行isJavaWindow((时,它总是返回false。 我尝试了其他建议将 Windows_run(( 代码放在表单构造函数中的解决方案,但这对我没有影响。

值得注意的是,下面的代码确实适用于我的家用 PC,但不适用于我的工作 PC。它也适用于同事,但前提是他直接运行可执行文件 - 如果他尝试从 Visual Studio 运行它,它在那里也不起作用。

任何帮助将不胜感激。几天来,我一直在为此拔头发,并且已经用尽了我在谷歌或其他地方遇到的所有可能性。

JabApi.Windows_run();
Application.DoEvents();
string windowName = "SwingSet2";
string className = "SunAwtFrame";
IntPtr hWnd = JabApi.FindWindow(className, windowName);
//This always returns false (0), even though it's pointing to a valid Java window
if (JabApi.isJavaWindow(hWnd)==1) 
{
MessageBox.Show("Java window found!");
}

我将在这里回答我自己的问题。

问题原来是我以管理员身份运行Visual Studio。当我尝试以普通权限运行 VS 时,Java 访问桥代码立即开始按预期工作。

可执行文件本身也遇到了类似的问题。当我之前在 VS 外部运行可执行文件时,事实证明我是从具有提升权限的位置运行它的。当我将可执行文件移动到正常位置时,它按预期工作。

如果引用的访问桥 dll 与应用程序的位版本不匹配,则 isJavaWinndow(( 方法也返回 false。请确保为 64 位应用程序引用 64 位 dll版本(否则,则引用 32 位版本(。

最新更新