Pregunta

Estoy usando este código para hacer que mi programa Java abrir un (visible) ventana de 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();
        }

y he estado tratando de hacer lo mismo con el terminal OSX, aquí es donde estoy en este 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();
        }

Hasta el momento, ninguna suerte :( ¿Alguna sugerencia? El archivo .sh ni siquiera se ejecuta ...

¿Fue útil?

Solución

Me acaba de asegurarse de que su script de shell tiene los bits de ejecutar y simplemente pasar el nombre de archivo de secuencia de comandos shell.

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

Editar

No sé Java específicamente si hay alguna forma de establecer permisos de archivos para Unix / Linux con él para establecer el bit de ejecución o cómo escapar comillas. Pero sería algo como esto:

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

Otros consejos

Esto debería funcionar. No sólo se ejecuta la secuencia de comandos, pero abriendo un terminal también:

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

Si desea una nueva ventana de terminal visibles, no se puede ejecutar el shell directamente. Usted necesita comenzar a Terminal y luego ejecutar un archivo .command, no un script de shell. No estoy seguro de lo difícil que sería para conectar la salida estándar de ese comando a su proceso de Java. Puede que tenga que encontrar alguna otra manera de conseguir la salida en el terminal.

Por cierto, he intentado el código en una clase en mi propia Mac en casa, y encontré un archivo .sh bien. Yo estaba corriendo la clase Java desde la línea de comandos. Tal vez sh simplemente no está en su PATH.

Asumo que haya comprobado que el archivo .sh es ejecutable, ¿verdad?

¿Puedo sugerir que capture el error estándar y en la salida estándar, y que volcar. Eso te dará una idea de lo que está pasando (que es buena práctica en general).

Es posible que deba reunir la salida estándar y el error estándar en diferentes hilos para evitar problemas de bloqueo. Ver aquí para un StreamGobbler

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top