当前位置:首页 » 编程语言 » java动态库

java动态库

发布时间: 2022-11-19 04:11:49

java调用动态库,动态库放在项目的什么位置啊,前台jsp怎么调用!


dll文件
放到jdk的bin目录下,用jna框架的去调用dll文件,把调用dll文件的类继承Applet类,在jsp中引用这个Applet,例如
<applet
id='myApplet'
name='myApplet'
code='TestApplet'
codebase="applet"
width='2'
height='3'
archive="TestApplet.jar,jna.jar"
>
调用applet方法
document.myApplet.test();

Ⅱ java 调用动态链接库(jni方式调用dll文件)

jni
是由Java调用C/C++的动态链接库
(DLL)。
所以把.class-->.h-->dll
,想法是不正确的,
同时也违背了Jni的初衷。
Dll是由C/C++生成的。
以前的一个项目用到了Java调用C/C++的DLL,所以对这个还算熟悉。
那个dLL是由C++程序员写的,在Microsoft
Visual
C++
6.0编辑器中可以生成。然后由Java程序员用JNI来调用DLL里面实现的功能(方法)。

Ⅲ java 加载动态链接库怎么使用相对路径

用 System.loadLibrary() 加载 Native 库的搜索路径:

String libPath = System.getProperty("java.library.path");
StringTokenizer tkzr = new StringTokenizer(libPath, ";");
while (tkzr.hasMoreTokens())
out.println(tkzr.nextToken());

也可用 System.load() 加载指定路径的 Native 库。
System.load(fl.getCanonicalPath() + "\my.dll");
而文件对象 fl 和路径取得有以下方式:

File fl = new File(""); // 设定为当前文件夹
fl.getCanonicalPath(); // 获取标准的路径,抛出 IOException
fl.getAbsolutePath(); // 获取绝对路径,不抛出异常

getCanonicalPath() 解析 . 和 ..
getAbsolutePath() 不解析 . 和 ..
getPath() 返回 new File() 时设置的路径

如当前的路径为 C:\test

File fl = new File("abc");
fl.getCanonicalPath(); => C:\test\abc
fl.getAbsolutePath(); => C:\test\abc
fl.getPath(); => abc

Ⅳ 如何用java调用c++动态库

Java是通过JNI调用其他语言(包括C++)编译的本地方法的,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。
如下是详细讲解:

1、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++程序调用来生成所需的库文件。

2、C/C++中所需要做的工作
对于已生成的.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。然后编译连接成库文件即可。再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。
接上例子。我们先看一下TestDll.h文件的内容:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestDll */
#ifndef _Included_TestDll
#define _Included_TestDll
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_TestDll_get (JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_TestDll_set (JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
在具体实现的时候,我们只关心两个函数原型
JNIEXPORT jint JNICALL Java_TestDll_get (JNIEnv *, jclass);

JNIEXPORT void JNICALL Java_TestDll_set (JNIEnv *, jclass, jint);
这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。函数的名称是JAVA_再加上java程序的package路径再加函数名组成的。参数中,我们也只需要关心在JAVA程序中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰它。
下面我们用TestDll.cpp文件具体实现这两个函数:
#include "TestDll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_TestDll_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL Java_TestDll_set (JNIEnv *, jclass, jint j)
{
i = j;
}
编译连接成库文件,本例是在WINDOWS下做的,生成的是DLL文件。并且名称要与JAVA中需要调用的一致,这里就是goodluck.dll
把goodluck.dll拷贝到TestDll.class的目录下,java TestDll运行它,就可以观察到结果了。

Ⅳ java调用DLL动态库

1、总体说明:实现一个函数,传入整形数i,返回值i*i,这个函数做在DLL中,java将通过JNI调用这个函数,传入一个参数,得到返回值。
确定DLL的名称为calldll.dll,函数shanfei(int i)。2、编写java程序javacall.java,如下:public class javacall
{
static
{
System.loadLibrary("calldll");
}
public native static int shanfei(int i);
public static void main(String[] args)
{
javacall jc = new javacall();
int j;
j = jc.shanfei(4);
System.out.println(j);
}
}3、编译javac javacall.java4、生成头文件javah -jni javacall
生成javacall.h文件5、制作VC++动态库建立新DLL工程,程序中添加:#include "javacall.h"
JNIEXPORT jint JNICALL Java_javacall_shanfei (JNIEnv *, jclass, jint p)
{
int j = p*p;
return j;
}别忘了将javacall.h复制到VC工程目录中,然后编译,如果编译说找不到jni.h文件,可以将jni.h复制到工程目录中,还可将javacall.h文件中的#include <jni.h>改为#include "jni.h",再编译。
编译生成DLL文件如“test.dll”,名称与System.loadLibrary("test")中的名称一致
vc的编译办法:cl -I%java_home%include -I%java_home%includewin32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll
最后在运行时加参数-Djava.library.path=[dll寄存的路径]
相关的主题文章: 6、java调用将生成的calldll.dll文件复制到javacall.java所在的目录中,运行java javacall,应该可以看到运行结果。

Ⅵ java 调用动态库问题。动态库中 printf函数不能及时打印

线程进入new MainFrame()后,执行MainFrame的内容,未返回而已,可以将new call_dll().helloWord();放到new MainFrame()前,或者在new MainFrame()中调用打印!

Ⅶ java调用动态库,动态库放在项目的什么位置啊,前台jsp怎么调用!

你会连接数据库的语句不?要是不会,可以查查文档,连接数据库的,
首先连接数据库,然后在用sql语句,进行逻辑处理哦

Ⅷ java如何加载多个C动态库的dll

启动函数里设置 -Djava.library.path="路径"
Widndows下多个路径请用;隔开,这个dll必须使用JNI技术编译的。
假设DLl.dll
你只需要在程序里写上System.loadLibrary("DLL");

Ⅸ Java中如何调用VC的动态库

动态链接库必须实现了 javap 生成的头文件中声明的函数.
确保 DLL 在系统路径中(PATH环境变量, 以及可执行文件所在路径)
然后直接调用 native 方法即可.

Ⅹ java 加载动态链接库怎么使用相对路径

java 加载动态链接库使用相对路径一般是不可以直接从jar文件中加载目标dll文件,需要分两步:
1、从jar中拷贝dll文件
public static void loadJarDll(String name) throws IOException {
InputStream in = MyClass.class.getResourceAsStream(name);
byte[] buffer = new byte[1024];
int read = -1;
File temp = File.createTempFile(name, "");
FileOutputStream fos = new FileOutputStream(temp);
while((read = in.read(buffer)) != -1) {
fos.write(buffer, 0, read);
}
fos.close();
in.close();
System.load(temp.getAbsolutePath());
}
2、创建dll所在的相对路径,用临时了路径过度:
ArrayList<String> bins = new ArrayList<String>(){{
add("/nm/metadata/bin/dependence1.dll");
add("/nm/metadata/bin/dependence2.dll");
add("/nm/metadata/bin/dependence3.dll");
add("/nm/metadata/bin/dependence4.dll");
add("/nm/metadata/bin/jniBin.dll");
}};
new File(new File(System.getProperty("java.io.tmpdir")), name)

热点内容
速腾哪个配置动力最好 发布:2025-01-15 13:56:44 浏览:901
编程做转盘 发布:2025-01-15 13:56:04 浏览:192
安卓辅助脚本如何写 发布:2025-01-15 13:42:50 浏览:123
压缩裤的穿法 发布:2025-01-15 13:39:24 浏览:314
支付宝如何设支付密码 发布:2025-01-15 13:39:24 浏览:257
ea编程入门 发布:2025-01-15 13:30:11 浏览:412
应缴费档次配置异常怎么回事 发布:2025-01-15 13:20:34 浏览:617
成都php招聘 发布:2025-01-15 13:12:16 浏览:381
怎么调用服务器数据库 发布:2025-01-15 13:06:25 浏览:656
人人网设置访问权限 发布:2025-01-15 13:02:06 浏览:563