易截截图软件、单文件、免安装、纯绿色、仅160KB

JNA实现Java调用Fortran

在成功实现Java调用C++之后,接下来想到能否通过JNA实现Java调用Fortran,今天试验了一下,还是比较容易的。
网上有一个Java调用F95的例子,但是我考虑不仅要实现F95的调用,还要实现F77的调用,所以费了一些周折。
问题的关键在于F77为过程名自动添加了一个尾部的下划线,所以sub1这个过程,到Java一端,就变成了sub1_,知道了这一点,后面就简单了。
1、创建一个动态链接库项目FortranDLL,新建一个简单的fortran源程序for1.f:
      subroutine sub1(i)
          INTEGER i;
          PRINT*, "SUB1 CALLED"
          PRINT*, i
      END subroutine
编译代码生成libFortranDLL.dll。
2、新建一个Java项目,包含JNA库
创建一个动态库接口代码FLib.java:
import com.sun.jna.Library;
import com.sun.jna.ptr.ByReference;
public interface FLib extends Library {
    void sub1_(ByReference  i);
}
创建一个主程序Main.java
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
public class Main {
    public static void main(String[] args) {
        // Loading dynamically the library
        FLib lib2 = (FLib) Native.loadLibrary("libFortranDLL", FLib.class);
        IntByReference a = new IntByReference(1234);
        lib2.sub1_(a);
    }
}
注意,关键在于接口当中的sub_这个命名规则,否则无法找到找到指定过程,另外默认情况下,fortran使用引用参数,所以不能简单实用int作为参数,必须实用引用参数。
运行程序,得到如下结果:
run:
 SUB1 CALLED
 1234
成功生成(总时间:1 秒)
3、G95的调用更简单一些,可以直接使用bind指定输


相关文档:

java定时执行代码

原文发表在http://baihuazhou.javaeye.com/blog/200642
我们在项目中,经常会碰到这样一种需求,就是让某个程序在某个固定的时间去运行,比如定时备份操作。在Java的J2SE的API中可以很容易做到这一点。
让我们需要定时执行的类继承自java.util.TimerTask中的TimerTask类,把需要执行的方法放入run方法中:
import java. ......

Java线程

第8章 多线程
本章目录
8.1 并发性、线程与多线程
8.2 获得线程体的两种方法
8.3 线程调度
8.1 并发性、线程与多线程
一、并发性的概念
目前的计算机操作系统大多支持并发性,即多个进程是交叉执行的,一般称多进程为系统级并发。
Java语言通过程序控制流来执行程序,单个的一段程序执行控制流称为线程。
多线 ......

JAVA 定时器

(1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务。
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行.
(3)Timer.schedule(TimerTask task,long delay)安排在指定延迟后执行指定的任务.
(4)Timer.schedule(TimerTask ......

Java上的宝石 JRuby 1.5正式发布

Java上的宝石 JRuby 1.5正式发布
2010年05月12日,JRuby团队非常高兴的宣布1.5.0版的发布。在这之前,曾经发布过JRuby 1.5.0 RC1的发布消息,相比之下,正式发布本本又提供了很多更新。
JRuby 1.5.0 版本的主页和下载地址分别是:
主页:http://www.jruby.org/
下载:http://www.jruby.org/download
这次发布是JRuby历 ......

体验Java的正则表达式

接触java正则表达式有一年的时间了,好久没有复习了,现在写个来复习一下:
package com.fengfei.test;
public class GetNumber {
 /**
  * 体验Java的正则表达式,找出字符串s中的数字
  * @param args
  */
 public static void main(String[] args) {
     & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号