2011-06-18 63 views
1

我想知道有沒有Java/Swing代碼在ubuntu/linux平臺上執行gFortran程序?執行gFortran代碼的Java Swing

任何人都有這樣的想法嗎?

+1

是的,這是可能的,請修改您的文章,並將JSwing更改爲Swing,請閱讀http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html和http:// download .oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html – mKorbel

+1

Swing確實與您的問題無關,我認爲除了需要注意在後臺線程上進行gFortran調用外。 –

+0

這意味着,有兩種方法可以做到這一點 1. Java執行gFortran代碼? 2. Jave執行執行gFortran代碼的C代碼嗎? – Melvin

回答

3

你可以做的一件事是運行一個單獨的程序,使用Runtime來啓動一個由你的fortran代碼組成的Process。以下是一個這樣的示例:

Runtime rt = Runtime.getRuntime(); 

try { 
    String[] env = {"/path/to/program"}; 
    Process proc = rt.exec("your_program", env); 
    System.out.println("return value: " + proc.waitFor()); 
} 
catch (Exception ex) { 
    System.err.println(ex); 
} 

上面的代碼將執行/路徑/到/方案/ your_program並等待其完成,然後讀出的返回碼。如果您需要與參數提供外部程序你將它們作爲一個字符串數組

import java.io.*; 
... 
Runtime rt = Runtime.getRuntime(); 

try { 
    String[] env = {"/path/to/program"}; 
    Process proc = rt.exec("your_program", env); 
    System.out.println("return value: " + proc.waitFor()); 

    InputStream stream = proc.getInputStream(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); 
    while (reader.ready()) { 
    // Do something with the data here. 
    System.out.println(reader.readLine()); 
    } 
} 
catch (Exception ex) { 
    System.err.println(ex); 
}  

或者,你可以寫一些信息標準輸出和閱讀,從您的Java程序。舉個例子,如果我想跑ls -lh /etc/是下面的代碼做什麼:

String[] cmd = {"ls", "-lh", "/etc/"}; 
    String[] env = {"/bin/"}; 
    Process proc = rt.exec(cmd, env); 

你也可以使用Java Native Interface具有可與Fortran接口的C/C++代碼進行溝通嘗試。

+2

如果您想使用JNI,請確保使用[iso_c_binding](http://gcc.gnu.org/onlinedocs/gcc-4.6.0/gfortran/Interoperable-Subroutines-and-Functions.html)。否則,你必須學習fortran名稱的修改。 – SiggyF

+0

我真的不知道從哪裏開始! – Melvin

+0

@ user793260:最簡單的做法是從你的java程序運行一個外部程序。你需要fortran程序的迴應嗎?一種方法是將結果合併到程序的返回代碼中(當它終止時),另一種方法是將一些結果寫入文件或者可以在java程序和fortran程序之間建立套接字連接。 –