QProcess在Windows 7下无法启动Java应用程序

3

我正在使用Qt (4.6.1)编写一个Windows应用程序,该应用程序使用QProcess类来执行Java应用程序。

以下是基本代码:

process = new QProcess(this);
connect( process, SIGNAL( started() ),                  this, SLOT( onProcessStarts() ) );
connect( process, SIGNAL( finished(int) ),              this, SLOT( onProcessEnds(int) ) );
connect( process, SIGNAL( readyReadStandardOutput() ),  this, SLOT( onProcessOutputs() ) );
connect( process, SIGNAL( error(QProcess::ProcessError)), this, SLOT(onProcessError(QProcess::ProcessError)));

QStringList arguments;
arguments << "-jar";
arguments << "absolute_path\app.jar";   //the java app that I want to execute
arguments << "-blah-blah";              //some java app's arguments
process->start( "java", arguments );

这是我启动Java应用程序的方法,它可以正常工作。但是,我只在我的Windows XP机器上进行了测试。当我在另一台安装了Windows 7的计算机上进行测试时,它失败了。
在Windows 7中,QProcess信号error(QProcess::ProcessError)在process->start(...)之后发出,给我带来了错误QProcess::FailedToStart。
我还测试了以下内容: QStringList arguments; arguments << "/c"; arguments << "java"; arguments << "-jar"; arguments << "absolute_path\app.jar"; //我想要执行的Java应用程序 arguments << "-blah-blah"; //一些Java应用程序的参数 process->start( "cmd.exe", arguments ); 但是,cmd.exe抱怨找不到Java...
我怀疑这里涉及到某些权限问题;我将可执行文件设置为以管理员身份运行,但是没有运气,所以我已经没有更多的想法...
显然,在Windows 7机器上安装了Java(从cmd.exe手动调用它可以工作)。

请将此内容发布到qt-interest@trolltech.com - SunnyShah
看起来你的环境没有配置好。请更改你的 PATH 环境变量,将包含 java.exe 的路径加入其中,对于我来说它是 “C:\Java\JRE\Bin” ,在你的系统上找到 java.exe 并相应地更改此路径。 - Muhammad Anjum Kaiser
路径已正确配置,正如我在问题中所说的那样,从命令行调用Java是有效的(可以从任何位置调用)。 - Pherrymason
嗨,我在使用QProcess和Java时遇到了同样的问题。你找到解决方法了吗?能否发布一个解决方案?谢谢。 - theosem
没有,我没有找到任何解决方案。我在一段时间前放弃了这个项目,不知道Qt的新版本是否解决了这个问题。 - Pherrymason
2个回答

1

您可能需要检查文档中提到的 QProcess 环境。我曾经遇到过这样的情况,应用程序/QProcess 的环境与登录用户的环境相差很大,因此当从代码中执行某些操作时,它不起作用,但当以系统用户身份执行完全相同的命令时,它可以正常工作。

尝试转储 QProcess 认为其环境是什么样子,并查看其中有什么:

qDebug() << QProcess::environment();

希望这能帮助你让它正常工作。

0

我知道已经过了很长时间,但我刚刚遇到了同样的问题。我正在运行一个包含QProcess中java执行的bash脚本,除了java输出之外,几乎所有内容都被readyRead信号和映射函数捕获。

对我来说,解决方法是在java行中添加bash重定向 2>&1

java -cp %(cpPath)s org.opensha.step.calc.STEP_main 2>&1

对我来说已经起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接