2016-12-11 1 views
-1

Ich weiß, es gibt bereits einige Beiträge darüber, aber keiner von ihnen beantwortet meine Frage.Rufen Sie ein C-Programm in Java

Hier ist die Situation, ich habe Programm in C geschrieben, aber ich entwickelte meine GUI in Java. Also muss ich mein C-Programm aufrufen, wenn ich auf einen Button oder eine Combobox klicke.

Um das zu tun, ist es möglich, nur das C-Programm zu kompilieren und dann in meinem Java-Interface aufzurufen? (Und wenn es möglich ist, wie mache ich das?).

Oder muss ich haben verwenden JNI? (Ich habe ein paar Posts darüber gelesen, aber es schien ziemlich kompliziert zu sein, es nur für ein Projekt zu lernen).

+2

Ja, Sie haben JNI verwenden, um von Java – aleb2000

+0

nativen Methoden aufrufen Wenn Sie den C-Code müssen mit dem Java-Programm zusammenarbeiten dann ist die Verwendung von JNI (oder JNA) die richtige Lösung. Wenn Sie nur ein kompiliertes Programm starten wollen, dann können Sie es über Systembefehle ausführen (beachten Sie, dass dies viele andere Probleme verursachen kann) – UnholySheep

+0

Dies wird nicht gut enden. Sie sollten darüber genauer nachdenken. Port das C-Programm nach Java. Es ist Zeit. Du wirst dir viel Herzschmerz ersparen. Die "Einsparungen", die Sie durch die Wiederverwendung dieser ausführbaren C-Datei erzielen, sind den Aufwand nicht wert. – duffymo

Antwort

1

Um maximale Interoperabilität zu erreichen, sollten Sie JNI verwenden, aber als einfachen Ansatz kompilieren Sie einfach C-Code und rufen C ausführbar von JAVA mit Runtime.getRuntime().exec() auf.

, wenn Sie unter UNIX sind Antwort zu lesen könnten Sie so etwas tun:

String line; 
Process p = Runtime.getRuntime().exec("/path/to/C/executable"); 

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
while ((line = in.readLine()) != null) { 
    System.out.println(line); 
} 
in.close(); 
+2

Runtime.exec wurde vor langer Zeit von [ProcessBuilder] (https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html) veraltet. – VGR

+0

@VGR ja sorry ... es ist schon eine Weile her, seit ich das letzte Mal Java benutzt habe ... Wenn du willst, kannst du meine Antwort bearbeiten –