可以从delphi编写的应用程序中控制java应用程序吗?

时间:2011-06-22 11:27:03

标签: java delphi

我的问题非常简单我有一个用java编写的应用程序,我想从我的应用程序中发送命令ex(单击按钮,发送一些击键,单击菜单项),我将在delphi中编写。这个概念甚至可能吗?

6 个答案:

答案 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()”,您只需要公开方法。

http://home.pacifier.com/~mmead/jni/delphi/

答案 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类型。