Javafx mac терминал внешний процесс - PullRequest
0 голосов
/ 17 января 2019

Используя JavaFX, я пытаюсь запустить программу a.out на терминале Mac OSX. Следующий код не работает на Mac. Тот же код работает в Windows, написав cmndM = {"cmd", "/ c", "start", "a.exe"}. Что не так на Mac?

protected void onRunClick(ActionEvent evt) throws IOException {
    String exeM="./a.out";
    Runtime runtime=Runtime.getRuntime();
    String[] cmndM= {"/bin/sh","-c",exeM}; Process pm=null; File dirM=new File(pth);
    try {
        pm=runtime.exec(cmndM, null, dirM);}
    }catch (IOException e) {
        msg.setText("Error in running simulation.");
    }
}

1 Ответ

0 голосов
/ 17 января 2019

Может быть связано с расположением файла.

Сначала я бы попробовал с фиксированным местоположением, просто чтобы убедиться, что оно работает.

Также убедитесь, что файл действительно находится внутри pth.

package javafxapplication1;

import java.io.File;
import java.io.IOException;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class JavaFXApplication1 extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                String exeM="/tmp/a.out";
                Runtime runtime=Runtime.getRuntime();
                String[] cmndM= {"/bin/sh","-c",exeM}; 
                Process pm=null; 
                File dirM=new File("/tmp");
                try {
                    pm=runtime.exec(cmndM, null, dirM);
                }catch (IOException e) {
                    System.out.println("Error");
                }
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
...