netlogo 用java怎么写

netlogo 用java怎么写,第1张

NetLogo一个建模工具,模拟自然和社会现象的编程语言。简单的界面,让我们快速对它有个整体的了解,并掌握如何深入学习的精髓。

工具/原料

NetLogo 5.0.3

方法/步骤

安装并运行程序,介绍几个主要的控件,[界面]模型的图形界面,[程序]后台控制程序,[添加]添加右侧可选择的控件,[速度]调节图形界面运行的速度,[更新视图]不更新的话运行速度会更加快速(如果你急于要数首卜乱据结果的话),[设置]设置图形的中心位置,字体大小等,[指令中心]这个区域可以输入命令来查看运行中的数据,类似调试。

快者档速了解NetLogo到底建模是什么样的,你可以打开它自带的模型库,可以看到会有很多自带模型:简单模型,课程模型,代码示例和分支网络类的。

模拟雨水汇集成河流的例子和模拟狼吃羊的例子。

如何建立我们自己的模型呢?如弊绝添加一个按钮,名为“setup"(随便取),会看到setup为红色,那是因为还没有添加代码的原因,在程序里添加

to setup

这里是按钮要做的事情

end

点击帮助中的NetLogo用户手册可以看到NetLogo的介绍和说明。

在NetLogo的安装目录里也可以找到其使用手册,里面的介绍很详细。

下面是我用其做的网络信任模型,切身的体会是NetLogo的语法特点和我们熟悉的C++,Java等有很大的不同,毕竟其是用于建模的,针对性比较强。根据你的目的择优选择。

END

注意事项

认真阅读用户手册会有很大的帮助

JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。

简单介绍及应用如下:

一、JAVA中所需要做的工作

在JAVA程序中,首先需要在类中声明所调用的库名称,如下:

static {

System.loadLibrary(“goodluck”)

}

在这亮举里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。

还需要对将要调用的方法做本地声明,渗键袜关键字为native。并且只需要声明,而不需要具 体实现。如下:

public native static void set(int i)

public native static int get()

然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。

例如程序testdll.java,内容为:

public class testdll

{

static

{

System.loadLibrary("goodluck")

}

public native static int get()

public native static void set(int i)

public static void main(String[] args)

{

testdll test = new testdll()

test.set(10)

System.out.println(test.get())

}

}

用javac testdll.java编译它,会生成testdll.class。

再用javah testdll,则会在当前目录下生成testdll.h文件,这个文丛激件需要被C/C++程序调用来生成所需的库文件。

JNI是Java Native Interface的缩写,中文为JAVA本地调用。

·编写带有native声明的方法的java类

·使用javac命令编译所编写的java类

·使用javah ?jni java类名生成扩展名为h的头文件

·使用C/C++实现本地方法

·将C/C++编写的文件生成动态连接库

·ok

1) 编写java程序:这里以HelloWorld为例。

代码1:

class HelloWorld {

public native void displayHelloWorld()

static {

System.loadLibrary("hello")

}

public static void main(String[] args) {

new HelloWorld().displayHelloWorld()

}

}

声明native方法:如果你想将一个方法做为一个本地方法的话,那么你就必须声明改方法为native的,并且不能实现。其中方法的参数和返回值在后面讲述。 Load动态库:System.loadLibrary("hello")加载动态库(我们可以这样理解:我们的方法 displayHelloWorld()没有实现,但是我们在下面就直接使用了,所以必须在使用之前对它进行初始化)这里一般是以static块进行加载的。同时需要注意的是System.loadLibrary()的参数“hello”是动态库的名字。

2) 编译

没有什么好说的了 javac HelloWorld.java

3) 生成扩展名为h的头文件 javah ?

jni HelloWorld 头文件的内容: /* DO NOT EDIT THIS FILE - it is machine generated */

1. include

/* Header for class HelloWorld */

1. ifndef _Included_HelloWorld

2. define _Included_HelloWorld

3. ifdef __cplusplus

extern "C" {

1. endif

/*

* Class: HelloWorld

* Method: displayHelloWorld

* Signature: ()V

* /

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject)

1. ifdef __cplusplus

}

1. endif

2. endif

(这里我们可以这样理解:这个h文件相当于我们在java里面的接口,这里声明了局乱乱一个 Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject)方法,然后在我们的本地方法里面实现这个方法,也就是说我们在编写C/C++程序的时候所使用的方法名必须和这里的一致)。陪袭

4) 编写本地方法实现和由javah命令生成的头文件里面声明的方法名相同的方法。

代码2:

1 #include "jni.h"

2 #include "HelloWorld.h"

3 //#include other headers

4 JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)

{

printf("Hello world!\n")

return

}

注意代码2中的第1行,需要将jni.h(该文件可以在%JAVA_HOME%/include文件夹下面找到)文件引入,因为在程序中的JNIEnv、 jobject等类型都是在该头文件中定义的;另外在第2行需要将HelloWorld.h头文件引入(我是这么理解的:相当于我们在编写java程序的时候,实现一个接口的话需要声明才可以桐档,这里就是将HelloWorld.h头文件里面声明的方法加以实现。当然不一定是这样)。然后保存为 HelloWorldImpl.c就ok了。

5) 生成动态库

这里以在Windows中为例,需要生成dll文件。在保存HelloWorldImpl.c文件夹下面,使用VC的编译器cl成。 cl -I%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll 注意:生成的dll文件名在选项-Fe后面配置,这里是hello,因为在HelloWorld.java文件中我们loadLibary的时候使用的名字是hello。当然这里修改之后那里也需要修改。另外需要将-I%java_home%\include -I%java_home%\include\win32参数加上,因为在第四步里面编写本地方法的时候引入了jni.h文件。

6) 运行程序 java HelloWorld就ok.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12274459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存