我的问题非常简单我有一个用java编写的应用程序,我想从我的应用程序中发送命令ex(单击按钮,发送一些击键,单击菜单项),我将在delphi中编写。这个概念甚至可能吗?
答案 0 :(得分:4)
那取决于使用哪种Java GUI技术。如果使用SWT或AWT,您可以获得UI组件的处理,因为这两个工具包使用本机库。另一方面,如果该Java应用程序GUI是由SWING的bean创建的,则无法获得任何句柄。因为,swing工具包是由纯Java实现的。
答案 1 :(得分:4)
我实际上必须在我工作的最后一个地方执行此操作,您可以使用复杂的窗口事件等来解决它...如上所述但是如果您可以访问Java源代码,只需编写其他访问方法即可调用关闭的特定运行时(即触发公共静态void main(String [] args);通过本机调用或通过命令行。
OR
在Java / Delphi之间通过TCP / IP实现简单的消息系统,并发送XML或一些简单的字符串映射(我认为设置可以来回传递的地图需要大约一个小时)。
在我的情况下,我们只是简单地处理报告和与数据库交谈,因此很容易解决而无需进入本机调用。或者,有一个用于Delphi的JNI端口,它与Delphi 7非常兼容。我不知道你正在使用什么运行时但它可能是一个选项。
老实说,TCP / IP方法可能是最简单的方法。它实现起来并不需要太多,它不会占用大量资源,它允许您作为数据包很容易地执行“myMenuItem.onClick()”,您只需要公开方法。
答案 2 :(得分:3)
如果可以修改Java应用程序,Java Robot API(包含在JRE 1.3和更新版本中)可能会有所帮助。这将允许控制一个Swing应用程序,它不像Gursel写的那样提供窗口句柄。显然需要一些IPC,例如可以使用套接字来实现。
答案 3 :(得分:2)
简短:是,但取决于Java应用程序,它可能很难且不可靠。
我不是Java人,所以我不知道这是不是常态,但我必须自动化的一个Java应用程序显示了一个仅使用1(一个)窗口句柄的对话框!它由几个编辑框,按钮组成,看起来像组合框,但这些不是真正的Windows控件,而是由原始开发人员使用的任何GUI工具包重新创建的小部件。我无法使用普通的Windows消息来操作它们,因为就Windows而言,它只是一个窗口。
幸运的是,我唯一要做的就是点击一个按钮。我使用mouse_event将鼠标移动到按钮的预期区域上,然后再次单击按钮。它有效,但以这种方式操纵输入既不可靠又脆弱。
答案 4 :(得分:2)
为了澄清Daniel Chapman和mjn评论,请在下面找到代码摘录,显示Delphi控制基于NetBeans ClientEditor示例的Jframe中包含的Java Swing UI组件(TextField)。
请注意,此示例不使用Java源代码或使用TCP,XML,Windowing事件处理技术或IPC,只是简单地使用Delphi代码调用一些Java代码。
procedure TForm1.Button1Click(Sender: TObject);
begin
FJFrame := Tjavax_swing_JFrame.Create('Client Editor');
FClientEditor := Tclienteditor_ClientEditor.Create;
FJFrame.GetContentPane().Add(FClientEditor);
FJFrame.Pack;
FJFrame.SetVisible(True);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// Delphi setting a value in a Java Swing UI component
FclientEditor.FirstNameTextField.SetText('Delphi 1stName');
end;
长类型名称对于此示例来说只是一个明确的问题,当然可以更短。
此外,在此示例中JNI没有问题。
答案 5 :(得分:1)
你看过Java for Delphi吗?
它让你从Delphi中调用Java,将Java类型公开为Delphi类型。