2011-06-18 29 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程序之间建立套接字连接。 –