使用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);
    }
}

你可能感兴趣的:(jdk,windows,jni,ext)