Domanda

Sto usando questo codice per fare il mio programma Java aprire un (visibile) finestra CMD:

try {
            String line;
            Process p = Runtime.getRuntime().exec("cmd /C start \"Render\" \"" + myPath + "\\punchRender.cmd\"");
             BufferedReader input =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((line = input.readLine()) != null) {
            System.out.println(line);
            jLabel7.setText(line);

            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }

e ho cercato di fare la stessa cosa con il terminale OSX, questo è dove sono in questo momento:

  try {
            String line;
            Process p = Runtime.getRuntime().exec("sh " + myPath + "/punchRender.sh");
             BufferedReader input =
                    new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((line = input.readLine()) != null) {
            System.out.println(line);
            jLabel7.setText(line);

            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }

Finora, nessuna fortuna :( Qualche suggerimento? Il file Sh non è nemmeno in esecuzione ...

È stato utile?

Soluzione

Vorrei solo assicurarsi che il proprio script di shell ha il execute bit su e basta passare nel nome del file script di shell.

Process p = Runtime.getRuntime().exec(myPath + "/punchRender.sh")

Modifica

Non so Java in particolare se v'è comunque di impostare i permessi dei file per Unix / Linux con esso per impostare il bit di esecuzione o come sfuggire le virgolette. Ma sarebbe qualcosa di simile:

Process chmod = Runtime.getRuntime().exec("chmod u+x \"" + myPath + "/punchRenderer.sh\"")

Altri suggerimenti

Questo dovrebbe funzionare. Non solo l'esecuzione dello script, ma aprendo un terminale anche:

Process p = Runtime.getRuntime().exec("open -a /Applications/Utilities/Terminal.app \"" + myPath + " /punchRender.sh\"");

Se si desidera una nuova finestra Terminale visibile, non è possibile eseguire direttamente il guscio. È necessario avviare il terminale e quindi eseguire un file .command, non uno script di shell. Non sono sicuro di quanto sia difficile potrebbe essere quella di collegare lo stdout di quel comando per il processo di Java. Potrebbe essere necessario capire qualche altro modo di ottenere l'output nel terminale.

A proposito, ho provato il codice in una classe per conto mio Mac a casa, ed è eseguito un file Sh bene. Stavo correndo la classe Java dalla riga di comando. Forse sh semplicemente non è nel PATH.

I supporre aver controllato che il file .sh è eseguibile, non è vero?

Can vi consiglio di catturare l'errore standard e come standard output, e di dettagli che. Questo dovrebbe darvi qualche idea di ciò che sta succedendo (è buona pratica in generale).

Potrebbe essere necessario raccogliere lo standard output e lo standard error in diversi thread per evitare problemi di blocco. Vedere qui per un StreamGobbler

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top