Laufen ein .exe Datei in java-code

Ich versuche zu laufen eine .exe-Datei, die ich generiert haben, innerhalb einer Java-code. Ich habe ein GUI geschrieben in Java und der .exe-Datei wird generiert mit MATLAB (die eigentlich ein Simulink-Modell). Wenn ich das ausführen .exe-Datei separat (d.h. ich Doppel Klick drauf) wird es erstellen Sie eine Ausgabe-Datei ( was ich erwarte), aber wenn ich mein Java-code es öffnet sich die Eingabeaufforderung, aber es wird nicht, erzeugen keine Ausgaben überhaupt -in der Tat bin ich auch nicht sicher, ob es läuft mein .exe-Datei ist oder nicht.

Hier ist mein code:

package combustionModel;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GUIInterface extends JFrame {  
    JButton b1 = new JButton();

    public static void main(String[] args){
        GUIInterface gui = new GUIInterface();  
    }

    static class Action implements ActionListener{
        public void actionPerformed (ActionEvent e){
            JFrame frame2 = new JFrame();
            frame2.setVisible(true);
            frame2.setSize(100, 200);
            final JFileChooser fc  = new JFileChooser();
            fc.showOpenDialog(null);
            File file = fc.getSelectedFile();
            System.out.println(file.getAbsolutePath());
            try {
                Runtime runtime = Runtime.getRuntime();
                Process p = Runtime.getRuntime().exec("cmd /c start "+file.getAbsolutePath());
                p.waitFor();
            } catch (IOException e1) {
                //TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (InterruptedException e1) {
                //TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    }

    public GUIInterface(){
        setVisible (true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400,200);
        setLayout(new FlowLayout());
        JPanel adpanel = new JPanel();
        JButton OK = new JButton();
        b1.addActionListener(new Action());
        adpanel.add(OK);
        adpanel.add(b1);
        super.add(adpanel);
    }

}
Verwenden Sie nicht Runtime.exec() verwenden Sie ein ProcessBuilder!
Lesen (und umsetzen) alle die Empfehlungen des Wenn Laufzeit.exec() won ' T. Das könnte das problem lösen. Wenn nicht, sollte es mehr Informationen zu der Grund, warum es fehlgeschlagen ist. Dann ignorieren Sie, dass es sich um exec und bauen die Process mit einem ProcessBuilder. Auch brechen String arg in String[] args Konto für Argumente, die selbst Leerzeichen enthalten. @fge +1
Sie müssen verbrauchen den Prozess inputstream, wie beschrieben in der javadoc, wenn möglich, nicht auf dem UI-thread.
Denken Sie daran, dass, wenn Sie dies tun, werden Sie nicht mehr haben java wichtigsten Vorteil der Kompatibilität.
Aber mein code nimmt keine Argumente als input -liest es ein paar Dateien, aber Ihre Verzeichnis ist schon hart codiert in der .exe-Datei - Von dem, was ich sehe, eigentlich läuft mein .exe -sehen, was es schreibt auf die Eingabeaufforderung - aber für einige Grund es nicht erzeugen die output-Dateien, die es angeblich zu generieren! Vielen Dank für Ihre Hilfe! @AndrewThompson

InformationsquelleAutor Mehdi | 2013-06-28

Schreibe einen Kommentar