`
D314123499
  • 浏览: 6154 次
  • 性别: Icon_minigender_1
  • 来自: 河北
文章分类
社区版块
存档分类
最新评论

JNative

阅读更多

使用JNative对条码打印机进行打印


因项目需要,对Godex  EZ2300条码机进行调用打印, 驱动为Ez2000.dll, 用JNI可以实现调用,但比较麻烦, 需

要用到VC6进行DLL封装,改用JNative组件进行调用, 步骤如下:

1. 下载JNative-1.3.2.zip组件库

2. 解压出来后有JNative.jar  /  JNativeCpp.dll  /  libJNativeCpp.so三个文件,JNative.jar置于%JAVA_HOME%/jre/lib/ext目录下, JNativeCpp.dll置于%SYSTEM%/WINDOWS/SYSTEM32目录下

3.将Ez2000.dll置于%SYSTEM%/WINDOWS/SYSTEM32目录以及%JAVA_HOME%/jdk/bin目录下

4.

具体Java代码如下:

package com.athens.test;

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;

public class Demo {
   
    private static final String PRINTER_DLL = "Ez2000.dll";
   
    public static void main(String [] args) {
        Demo demo = new Demo();
        System.loadLibrary("Ez2000");
        JNative n = null;
        try {
            n = demo.getJNativeByFunction("isready");
            n.setRetVal(Type.INT);
//          n.setParameter(1, Type.VOID, "");   
            n.invoke();
            Integer isready = Integer.parseInt(n.getRetVal());
            if(isready == 1){
               
                System.out.println("条码机可以开始接收资料!Starting...");
                System.out.println("Starting...");
                // 打开端口
                n = demo.getJNativeByFunction("openport");
                n.setParameter(0, Type.STRING, "0");
                n.invoke();
               
                // 设定参数
                n = demo.getJNativeByFunction("setup");
                n.setRetVal(Type.INT);
                n.setParameter(0, Type.INT, "30");
                n.setParameter(0, Type.INT, "7");
                n.setParameter(0, Type.INT, "2");
                n.setParameter(0, Type.INT, "1");
                n.setParameter(0, Type.INT, "0");
                n.setParameter(0, Type.INT, "0");
                n.invoke();
               
                // 发出指令
                n = demo.getJNativeByFunction("sendcommand");
                n.setRetVal(Type.INT);
                n.setParameter(0, Type.STRING, "W70");
                n.invoke();
               
                n.setRetVal(Type.INT);
                n.setParameter(0, Type.STRING, "^P1");
                n.invoke();
               
                n.setRetVal(Type.INT);
                n.setParameter(0, Type.STRING, "^L");
                n.invoke();
               
                n.setRetVal(Type.INT);
                n.setParameter(0, Type.STRING, "AC,20,60,1,1,1,0,TEST");
                n.invoke();
               
                // 发送条形码
                n = demo.getJNativeByFunction("ecTextOut");
                n.setParameter(0, Type.INT, "20");
                n.setParameter(1, Type.INT, "10");
                n.setParameter(2, Type.INT, "34");
                n.setParameter(3, Type.STRING, "标楷体");
                n.setParameter(4, Type.STRING, "Athens Testing Successlly!!!");
                n.invoke();
               
                // 发出指令
                n = demo.getJNativeByFunction("sendcommand");
                n.setRetVal(Type.INT);
                n.setParameter(0, Type.STRING, "E");
                n.invoke();
               
                // 关闭端口
                n = demo.getJNativeByFunction("closeport");
                n.invoke();
                System.out.println("Ending...");
            }else{
                System.out.println("条码机无法接收资料!");
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if (n != null){
                try {
                    n.dispose();
                } catch (NativeException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }
   
    // 通过方法名取得JNative对象
    public JNative getJNativeByFunction(String functionName) throws NativeException{
        return new JNative(PRINTER_DLL, functionName);
    }
}

分享到:
评论
3 楼 zwh2395847zwh 2011-11-08  
简单易用的代码
一试就会了
谢楼主了!
2 楼 shenjichao2009 2011-10-11  
这段代码能用吗?QQ897948924
1 楼 shenjichao2009 2011-10-11  
 

相关推荐

    JNative v1.3 docs

    jnative包用于调用dll动态库,目前(2011-12-20)最新版本为1.4RC2,官方正式版本文档为1.3,详见官方地址: http://jnative.free.fr/docs/ 这是最新的帮助文档HTML离线包,希望对大家有帮助 Packages org.xvolks....

    org.xvolks.jnative 源码

    《深入解析org.xvolks.jnative源码》 在Java世界中,为了实现与本地代码的交互,开发者经常需要借助JNI(Java Native Interface)技术。然而,JNI的使用门槛相对较高,涉及到C/C++编程,这给许多Java开发者带来了...

    JNative.jar以及JNative源码

    《深入理解JNative:Java调用DLL的桥梁》 在Java世界中,由于其平台无关性的特性,直接调用本地动态链接库(DLL)并非易事。然而,JNative库的出现,为Java程序员提供了一个方便的解决方案,使得Java能够无缝地与C/...

    JNative Java调用动态链接库jar包

    JNative是一个Java库,它为Java程序员提供了一种直接调用这些本地代码的能力,无需通过JNI(Java Native Interface)的复杂过程。 JNative的核心思想是将Java方法与本地函数绑定,使得Java代码可以像调用普通Java...

    Jnative1.4_java调用动态库所需jar

    1. **导入JNative.jar**: 将`JNative.jar`添加到项目的类路径中,这样Java虚拟机(JVM)就能找到并加载这个库。 2. **声明本地方法**: 在Java类中使用`native`关键字声明本地方法。例如: ```java public class ...

    JNative api说明文档

    **JNative API说明文档** **一、JNative简介** JNative是Java平台上的一个库,它允许Java程序直接调用本地(C/C++)代码,实现了Java与原生代码的无缝交互。通过JNative,开发者可以利用Java的跨平台优势,同时...

    linux jnative 调用.so方法及附属全部库和源码

    JNative getstring = new JNative("libmylib.so", "getstring"); getstring.setRetVal(Type.STRING); getstring.invoke(); System.out.println(getstring.getRetVal()); } } 4.输出结果 this is in test_a.....

    JNative.jar和JNativeCpp.dll

    标题中的"JNative.jar"和"JNativeCpp.dll"是两个关键组件,分别代表Java和C++之间的交互层。在IT行业中,这样的组合通常用于实现Java应用与原生系统资源的紧密集成,例如调用操作系统底层功能或者加速计算密集型任务...

    Jnative资源包源码

    《Jnative资源包源码详解》 Jnative是一款强大的Java本地接口库,它允许Java程序直接调用C和C++的动态链接库(DLL或.so文件),极大地拓展了Java平台的功能。本文将深入探讨Jnative的核心概念、工作原理以及如何在...

    jnative

    这里我们关注的工具是`jnative`,它是一个Java本地接口(Java Native Interface,JNI)的实现,允许Java代码直接调用C++编写的动态链接库(DLL)或共享库(如libJNativeCpp.so在Linux系统中)。这个过程涉及的知识点...

    JNative完全自学手册

    JNative完全自学手册 本手册旨在帮助读者完全深度理解掌握JNative核心技术,通过实例众多的讲解,让读者快速掌握JNative技术。 JNative是Java Native Interface的缩写,允许Java程序调用本地函数库,实现Java程序...

    JNative综合学习资料

    《JNative综合学习指南》 在Java编程世界中,JNative是一个重要的工具,它允许Java程序直接调用本地(C/C++)代码,打破了Java原生的“一次编写,到处运行”的沙箱环境,为开发者提供了更强大的功能扩展能力。...

    jnative调用动态库

    标题中的“jnative调用动态库”指的是Java中使用JNative库来调用本地(操作系统级别的)动态链接库(DLL或SO文件)的技术。在Java中,为了与操作系统底层功能进行交互,比如调用C/C++编译的库,我们可以使用Java ...

    JNative.jar 包

    《JNative.jar包详解》 在Java编程领域,我们经常需要与本地代码进行交互,以利用C++或C等语言的高效性能或者调用特定的系统功能。这就是JNI(Java Native Interface)发挥作用的地方。JNative.jar包就是这样一个...

    在Java程序中使用JNative调用dll文件

    在Java程序中调用DLL(动态链接库)文件通常是通过JNI(Java Native Interface)来实现的,而JNative是JNI的一个封装库,它提供了一种更简洁的方式来调用C/C++编写的本地代码。这篇博客文章可能介绍了如何利用...

    JNative用java调用动态库VC++

    在这个场景中,我们关注的是JNative,一个简化Java调用C/C++库的开源库。 JNative 的优点在于它的易用性、数据类型处理的高效以及对回调函数的支持。在使用JNative之前,我们需要了解一些基本概念。例如,`...

    jnative简单的使用

    **JNative:Java与本地代码交互的桥梁** 在Java编程中,有时我们需要调用本地操作系统提供的功能,或者利用已有的C/C++库,这时就需要用到JNative这样的库。JNative是一个开源的Java本地接口(JNI)工具包,它简化...

    Java调用Win32获取窗口句柄JNative-1.3.2

    JNative库是实现这一目标的一种工具,它允许Java代码通过JNI(Java Native Interface)来调用C/C++编写的本地代码,进而调用Win32 API。JNative-1.3.2版本提供了对这一功能的支持。 首先,我们来理解一下Java ...

    jnative源码和文档,包含JNativeCpp.dll和libJNativeCpp.so

    《深入解析JNative:连接Java与C++的桥梁》 JNative,作为一款强大的库,为Java程序员提供了与C++代码交互的能力。它允许Java应用程序调用C++编写的动态链接库(DLL或.so),从而扩展了Java的功能,特别是在处理...

    JNative-1.3.2.zip

    《JNative:Java调用C++的桥梁》 在IT领域,跨语言通信是一个常见的需求,比如Java开发者可能需要调用C或C++编写的库来实现特定功能。JNative正是这样一个工具,它允许Java程序无缝地调用本地(Native)代码,尤其...

Global site tag (gtag.js) - Google Analytics