【问题标题】:Running an executable (.exe) within a JFrame [closed]在 JFrame 中运行可执行文件(.exe)[关闭]
【发布时间】:2013-04-27 19:20:12
【问题描述】:

我目前正在开发一个 Java 项目,我们必须使用其他人创建的头像。这个头像是一个图形可执行文件。它通过xmlrpc与Java应用程序通信。

我希望能够在我的 Java 应用程序中运行(嵌入)这个可执行文件。我不只是想执行可执行文件,我希望它在 Java 应用程序中真正可见。

我知道这种行为在 C#(进程类)中是可能的,所以我想知道:这在 Java 中也可能吗?

应用程序中的头像必须是可伸缩的。

【问题讨论】:

  • 您是否知道可执行文件可能无法在某些其他系统上执行(例如,Linux 无法轻松执行 Windows *.exe 程序)并且可能存在安全风险?此外,可执行文件不需要提供一些图形。
  • 好吧,除非您有一个模拟器来在您的 java 应用程序中运行 windows 对象代码,否则您确实希望 Windows 运行您的可执行文件。 “使用 java 应用程序可见”是什么意思? ?你想得到可执行文件的输出吗?看看Runtime.exec()
  • @BasileStarynkevitch 目前我不关心多平台,目前我正在为 Windows 开发它。至于一般的可执行文件,我说的是全屏启动的特定可执行文件(头像)。
  • 这在 OS X 或 *nix 上肯定是不可能的!如果您只打算支持 Windows,请使用 C# 并完成它。
  • @bas 这是一个不错的技巧,但要做到这一点,您必须使用 Win32 API 来构建您的界面,这在 Java 中是不可能的。

标签: java swing embed frame executable


【解决方案1】:

C# example you gave 使用Win32 API 技巧,该技巧使用SetParent 将正在运行的嵌入式可执行文件的主窗口的父窗口从desktop window 更改为新创建的控件。为此,您需要:

  • 创建一个 WinAPI Window 控件以包含您的嵌入式可执行文件
  • 有权访问 Windows API 以获取正在运行的 .exe 主窗口的句柄
  • 有权访问 Windows API 以使用SetParent

问题在于您无权访问 Java 中的 Windows API。甚至使用JNIJNA 之类的东西也不容易做到,因为您无法直接访问由JVM 创建的WinAPI Window 控件(除了使用一些未记录的Windows 特定的 Sun API)。

【讨论】:

  • 感谢您的回答,我不确定,但我担心这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多