Topic: 请问有谁用java编过驱动扫描仪工作的程序?请教一下,谢谢!

  Print this page

1.请问有谁用java编过驱动扫描仪工作的程序?请教一下,谢谢! Copy to clipboard
Posted by: shsen
Posted on: 2003-02-27 15:36


2.Re:请问有谁用java编过驱动扫描仪工作的程序?请教一下,谢谢! [Re: shsen] Copy to clipboard
Posted by: whisperwind
Posted on: 2003-02-27 16:39

用jni吧

3.Re:请问有谁用java编过驱动扫描仪工作的程序?请教一下,谢谢! [Re: shsen] Copy to clipboard
Posted by: shsen
Posted on: 2003-02-27 16:44

恕小弟学浅,有听说过jni这个名词,但不知具体如何应用,能否具体一点?谢谢。

4.Re:请问有谁用java编过驱动扫描仪工作的程序?请教一下,谢谢! [Re: shsen] Copy to clipboard
Posted by: youlq
Posted on: 2003-02-27 17:35

shsen wrote:
恕小弟学浅,有听说过jni这个名词,但不知具体如何应用,能否具体一点?谢谢。


Use the search engine to find out what u want to know!

But there still is a simple article may help.

note:以下文章系转发!

--------------------------------------
JNI的简单使用
以一个最简单的HelloWorld程序来介绍一下JNI的最基本的使用方法:
1)首先要有一个HelloWorld.java。
这个是主文件,里面包括本地方法的java声明,一个main函数,还有一个静态代码段,用来导入所需要的动态连接库(在windows里是.dll)。
代码如下:
//HelloWorld.java
class HelloWorld {
public native void displayHelloWorld();//注意关键字native,这就说明这个方法是用本地方法实现的。

static {//静态代码段里面导入了hello.dll。
System.loadLibrary("hello");
}

public static void main(String[] args) {//调用本类的displayHelloWorld方法,(当然了方法实际上是用c语言实现的)
new HelloWorld().displayHelloWorld();
}
}

2)编译HelloWorld.java。
使用语句为:、
javac HelloWorld.java

3)使用javah命令生成一个.h文件。
使用语句为:、
javah HelloWorld

这就是实现displayHelloWorld()方法的c文件的头文件。文件名为HelloWorld.h代码如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
可以看到,这个文件里面主要就是需要在c文件里面实现的方法的方法声明。这个声明和java文件HelloWorld.java的有一点区别,原来的方法不带参数,可是现在有了两个参数。
这两个是任何一个本地方法都必须有的参数。
第一个参数是JNIEnv*,它用于连接从java应用程序传给你的本地方法的参数和对象。第二个参数是一个jobject,它指向当前对象本身,你也可以把它理解为java里面的this变量。对于一个本地实例方法,比如这个例子里的displayHelloWorld方法,jobject参数就是一个对象当前实例的引用。对于本地类的方法,这个参数就是一个方法类的引用。在这个例子里面不需要使用这两个参数。
另外一点,可以发现方法的名称和java文件里的不一致,这个方法名由以下几部分组成:
java_[包名+]类名_java方法名


4)编写实现本地方法的c文件
//本例中起名为HelloWorldImp.c
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");//这个例子中只输出一行Hello World!
return;
}

5)建立动态连接库
在windows下面使用下面的语句:
cl -Id:\jdk1.3.1\include -I d:\jdk1.3.1\include\win32 -LD HelloWorldImp.c -Fehello.dll
这里面有几部分。D:\jdk1.3.1是本地的java home的路径。在include和include\win32目录下面有产生动态连接库需要的几个.h文件,包括jni.h(在所有的实现native方法的c文件里面都要include这个文件)等等。
将产生的.dll文件放到环境变量path能找到的目录下。现在运行命令:
java HelloWorld
就会看到如下输出:
Hello World!

这就是一个最简单的JNI使用方法。

5.Re:请问有谁用java编过驱动扫描仪工作的程序?请教一下,谢谢! [Re: shsen] Copy to clipboard
Posted by: floater
Posted on: 2003-03-01 00:36

This stretches a little bit far, Big Smile. Better use something else.

6.Re:请问有谁用java编过驱动扫描仪工作的程序?请教一下,谢谢! [Re: floater] Copy to clipboard
Posted by: shsen
Posted on: 2003-03-03 16:00

floater wrote:
This stretches a little bit far, Big Smile. Better use something else.


还有其他更好的方法吗?java自带的包里有没有这方面的调用函数?

7.Re:请问有谁用java编过驱动扫描仪工作的程序?请教一下,谢谢! [Re: shsen] Copy to clipboard
Posted by: floater
Posted on: 2003-03-05 00:30

Sorry, I mean use C/C++ rather than java. This is simply because there is no lib for this in java, so either you do the dirty work, or someone else does it for you. Then you use java through pic file interfaces.


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923