Можно ли управлять Java-приложением из написанного на Delphi? - PullRequest
5 голосов
/ 22 июня 2011

Моя проблема довольно проста, у меня есть приложение, написанное на Java, и я хочу отправлять ему команды ex (нажмите кнопку, отправьте несколько нажатий клавиш, щелкните элемент меню) из моего приложения, которое я напишу в delphi. Возможна ли эта концепция?

Ответы [ 6 ]

4 голосов
/ 23 июня 2011

Я действительно должен был сделать это в последний раз, когда работал, вы можете обойти это сложными событиями окна и т. Д., Как упоминалось выше, но если у вас есть доступ к исходному коду Java, просто напишите другие методы доступа, которые вызываютопределенное время выполнения, которое закрывается (т. е. вызывает общедоступную статическую пустоту main (String [] args); через собственный вызов или через командную строку.

ИЛИ

Реализация простой простой системы сообщений между Java/ Delphi через TCP / IP и отправляет либо XML, либо некоторые простые сопоставления строк (я думаю, что для настройки карт, которые могут передаваться взад и вперед, потребовалось около часа).

В моем случае мы просто обрабатывали отчеты иобщаясь с базой данных, так что было довольно легко обойтись без использования нативного вызова. В качестве альтернативы есть (был) порт JNI для Delphi, который довольно хорошо работал с Delphi 7. Я понятия не имею, что вы за время выполненияиспользуя, но это может быть вариант.

Честно говоря, метод TCP / IP, вероятно, самый простой. Это не займет много времени, чтобы яБолее того, он не потребляет много ресурсов и позволяет довольно легко выполнять «myMenuItem.onClick ()» как пакет, вам просто нужно предоставить методы.

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

4 голосов
/ 22 июня 2011

Ну, это зависит от того, какая технология Java GUI используется.Если используется SWT или AWT, вы можете получить дескриптор компонентов пользовательского интерфейса, поскольку эти два инструментария используют собственные библиотеки. С другой стороны, если этот графический интерфейс Java-приложения создается компонентами SWING, вы не можете получить никакого дескриптора.Потому что Swing Toolkit реализован на чистой Java ..

3 голосов
/ 22 июня 2011

Если приложение Java можно изменить, Java Robot API (включенный в JRE 1.3 и новее) может быть полезным.Это позволило бы управлять приложением Swing, которое не предоставляет дескрипторы окон, как писал Гурзель.Очевидно, что потребуется IPC, который может быть реализован с использованием сокетов, например.

2 голосов
/ 24 сентября 2011

Для пояснения комментариев Дэниела Чепмена и mjn ниже приведен фрагмент кода, показывающий, как Delphi управляет компонентом пользовательского интерфейса Java Swing (TextField), содержащимся в Jframe на основе образца NetBeans ClientEditor.

Обратите внимание, что этот пример не использует исходный код 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.

2 голосов
/ 22 июня 2011

Коротко: ДА , но в зависимости от Java-приложения это может быть сложно и ненадежно.

Я не Java-парень, поэтому не знаю, так ли этонорма, но одно приложение Java, которое мне пришлось автоматизировать, отображало одно диалоговое окно, в котором использовался только 1 (один) дескриптор окна!Он состоял из нескольких блоков редактирования, кнопок, которые выглядели как комбинированные блоки, но это были не настоящие элементы управления Windows, а виджеты, воссозданные с помощью любого инструментария GUI, использованного оригинальным разработчиком.Я не мог использовать обычные сообщения Windows для манипулирования ими, потому что для Windows это было одно окно.

К счастью, единственное, что мне нужно было сделать, это нажать одну кнопку.Я использовал mouse_event , чтобы навести курсор мыши на ожидаемую область для кнопки и затем снова нажать кнопку.Это работает, но манипулирование вводом данных таким образом ненадежно и хрупко.

1 голос
/ 07 июля 2011

Вы уже видели Java для Delphi ?

Это позволяет вам вызывать Java из Delphi, выставляя типы Java как типы Delphi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...