J'ai essayé d'exécuter ce code:

QProcess process;
process.setWorkingDirectory("D:\\Programs\\Qt\\Units\\MyJavaProjects\\StackExp\\target");
process.setProgram("java.exe");
process.setArguments({"-jar","StackExp-1.0-SNAPSHOT.jar"});
process.start();

Et cmd ne s'ouvre pas et ne s'exécute pas. Il montre juste ce message:

QProcess: Destroyed while process ("java.exe") is still running

S'il vous plaît, qui sait ce qui ne va pas? Et comment puis-je exécuter mon fichier .jar en utilisant cmd dans QProcess?

1
Evendie 26 févr. 2021 à 10:17

1 réponse

Meilleure réponse

Vous appelez probablement le destructeur de QProcess avant qu'il ne soit terminé, ce qui tue le processus comme mentionné dans la documentation. Notez que le destructeur est appelé lorsque process est hors de portée.

Différentes solutions existent:

  1. Attendez la fin du processus: waitForFinished

    process.waitForFinished (-1); // -1 = no time out
    
  2. Construisez QProcess sur la pile

    QProcess *process = new QProcess();
    ...
    

    Notez que vous devez détruire le processus une fois qu'il est terminé pour éviter une fuite de mémoire. Spécifier un parent pendant la construction peut être utile pour automatiquement gérer la durée de vie de QProcess.

  3. Démarrez le processus en mode détaché: startDetached

    ...
    process.startDetached ();
    

    Si le processus appelant s'arrête, le processus détaché continuera à s'exécuter sans être affecté.

    On pourrait également utiliser la surcharge statique de QProcess::startDetached .

3
m7913d 26 févr. 2021 à 09:03