QProcess не запускает Java-приложение под Windows 7 - PullRequest
3 голосов
/ 05 марта 2010

Я пишу Windows-приложение, использующее Qt (4.6.1), которое использует класс 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; аргументы << "/ c"; аргументы << "Java"; аргументы << "-jar"; аргументы << "absolute_path \ app.jar"; // Java-приложение, которое я хочу выполнить аргументы << "-бла-бла"; // некоторые аргументы Java-приложения process-> start ("cmd.exe", аргументы); Но тогда cmd.exe жалуется, что не находит Java ...

Я подозреваю, что есть проблема с разрешением; Я установил мой исполняемый файл как администратор, но не повезло, поэтому у меня закончились идеи ...

Очевидно, что java установлен на машине с Windows 7 (работает вручную из cmd.exe).

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Возможно, вы захотите проверить среду QProcess, как указано в документации. Я видел случаи, когда среда application / QProcess несколько отличается от среды зарегистрированных пользователей, поэтому при выполнении чего-либо из кода это не работает, но при выполнении точно такой же команды, как у системного пользователя, это работает.

Попробуйте выполнить дамп к тому, что QProcess считает своей средой, и посмотрите, что там:

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

Надеюсь, это поможет вам заработать.

0 голосов
/ 25 июля 2018

Я знаю, что это было давно, но я только что столкнулся с той же проблемой. Я выполнял сценарий bash, который содержал выполнение Java в QProcess, и все, кроме вывода Java, было захвачено сигналами readyRead .. и отображенными функциями.

Решением для меня было добавить перенаправление bash 2>&1 в строку jave:

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

Это сработало для меня.

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