Как запустить внешнюю программу внутри фрейма Java в netbeans независимо от платформы?

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

Мой вопрос заключается в том, как я могу встроить графический интерфейс внешней программы во фрейм Java, если это даже отдаленно возможно?


person Mjones8323    schedule 29.06.2011    source источник
comment
Это графический интерфейс или вы хотите, чтобы вывод консоли отображался в вашем JFrame?   -  person Lawrence Dol    schedule 29.06.2011
comment
Я хочу, чтобы окно программы отображалось в моем JFrame в моем проекте с графическим интерфейсом. Программа, которую я хочу загрузить в JFrame, представляет собой визуальную молекулярную программу, а не консольную программу.   -  person Mjones8323    schedule 29.06.2011
comment
Так что да, программа, которую я хочу запустить в JFrame, представляет собой графический интерфейс.   -  person Mjones8323    schedule 29.06.2011


Ответы (3)


Учитывая уточняющие комментарии к вопросу, краткий ответ: «Нет, вы не можете этого сделать».

Java не может отображать графический интерфейс собственной программы в JFrame, даже если целевая программа была фактически спроектирована так, чтобы ее графический интерфейс мог быть представлен в рамках другой программы.

person Lawrence Dol    schedule 29.06.2011
comment
Однако могут быть системно-зависимые способы сделать это. - person Paŭlo Ebermann; 29.06.2011
comment
@Paulo: я использовал JNI совсем немного, и даже с этим я не вижу направления, которое делает то, что хочет @Cecil. - person Lawrence Dol; 30.06.2011
comment
Вы знаете, может ли C++ делать то, что я хочу? - person Mjones8323; 30.06.2011
comment
Я не знаю, как это делается, но Eclipse умеет это делать отлично. Например, если у вас есть файл csv или другой файл Excel, вы можете открыть его с помощью (Right-Click)->Open With->In-Place Editor, и окно Excel откроется внутри редактора eclipse. - person TankWhoCriedTom; 15.09.2014
comment
@TheHarrisonCrafter: Eclipse использует SWT, а не Swing. Это правда, что API-интерфейсы Windows позволяют встраивать другие приложения, поэтому, вопреки моему другому комментарию, это должно быть возможно через JNI; но не напрямую, используя только Swing. - person Lawrence Dol; 15.09.2014

Вы используете консольное приложение? Вы должны перехватить его стандартный вывод, чтобы сделать это правильно. Таким образом, вы можете показать текст, который выводит стороннее приложение, в элементе управления пользовательского интерфейса, который вы можете поместить в JFrame.

person Olaf    schedule 29.06.2011
comment
Нет, я использую собственный код в сочетании с кодом графического интерфейса пользователя Netbeans. Будет ли процесс для этого аналогичным? - person Mjones8323; 29.06.2011
comment
Приложение, которое я хочу запустить в JFrame, представляет собой графический интерфейс. - person Mjones8323; 29.06.2011
comment
@Cecil O'Dell: Вы пытаетесь показать графический интерфейс одного приложения внутри графического интерфейса другого приложения? Я считаю, что это было бы непозволительно сложно. Если вы написали это приложение, соответствующим образом разделив уровни (пользовательский интерфейс, бизнес-логика, доступ к данным), вы можете попытаться создать поверх него некоторый API, чтобы графический интерфейс основного приложения мог заменить исходный графический интерфейс. Вы также можете превратить его в веб-сервис или веб-приложение, но все это кажется излишним. - person Olaf; 29.06.2011
comment
Будет ли это так трудно выполнить? Сначала я подумал, что должен быть какой-то класс, чтобы справиться с большинством сложностей за вас. - person Mjones8323; 29.06.2011
comment
@Cecil O'Dell: То, что легко для веб-приложений, иногда непозволительно сложно для настольных приложений. Если вы не очень усердно относитесь к дизайну своих приложений, преобразование их в веб-архитектуру потребует значительных усилий. Если вы разработали оба приложения, можете ли вы объединить их в одно настольное приложение? - person Olaf; 29.06.2011

Используйте java.lang.Process или java.lang.Runtime.exec.

http://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html

person duffymo    schedule 29.06.2011
comment
Как я уже сказал, я уже использую среду выполнения в проекте, и моя внешняя программа успешно запускается. Проблема в том, что теперь я хочу, чтобы эта программа отображалась в jFrame, а не за ее пределами. - person Mjones8323; 29.06.2011