2017-05-03 1 views
1

Nous avons un problème bizarre avec ProcessBuilder avec la version OSX de notre application. Cela a commencé quand nous sommes passés à universalJavaApplicationStub. Auparavant, nous utilisions AppBundlerTask. Note: ne peut pas faire une classe échantillon, vous devez construire un ensemble complet d'applications mac pour voir ce résultat:ProcessBuilder ne parvient pas à trouver le fichier s'il est exécuté à partir du lot d'applications OSX

Notre code pour démarrer le processus est:

log.debug("render: {}", Arrays.toString(myCommandLine.toArray())); 
log.debug("render: dir={}", m_workingDir); 
final ProcessBuilder processBuilder = new ProcessBuilder(myCommandLine); 
processBuilder.directory(new File(m_workingDir)); 
final Process process = processBuilder.start(); 

et la sortie du journal avait l'air comme ceci:

render: [/Applications/EFI/Metrix/bin/cli/rasters, --saveasimg, --pagebox=MEDIABOX, --smoothing=All] 
render: dir=/Applications/EFI/Metrix/bin/cli/ 

cela a donné lieu à l'application de rasters lancer une erreur dans le journal, ce qui indique que c'était ne fonctionne pas à partir de son répertoire installé. (qui est le répertoire dans la 2ème ligne de journal.)

Il semble que le répertoire de travail n'est pas celui que j'ai spécifié dans l'appel processBuilder.directory().

Quelqu'un peut-il expliquer ce qui se passe?

+0

On dirait que vous ne pouvez pas compter sur le répertoire de travail en cours d'être défini (ce qui est assez commun). Vous pouvez demander à la JVM d'où votre classe a été chargée et en déduire le répertoire d'installation. Ou peut-être pouvez-vous simplement utiliser myCommandLine [0] '? –

+0

J'ai modifié notre code pour invoquer un script shell qui a fait un "pwd". Le répertoire de travail est correct. – CasaDelGato

+0

Essayez d'imprimer la valeur de 'new File (m_workingDir) .getAbsolutePath()' –

Répondre

0

En travaillant avec le fournisseur de l'application, il s'avère que j'ai maintenant besoin de faire un "CFetDeprocessus non configuré" avant d'exécuter leur application.