使用JAVA实现编程打印(如何调用C代码的dll)

来源:互联网 发布:淘宝卖家上传图片大小 编辑:程序博客网 时间:2024/06/03 22:17

JAVA去做一些底层硬件的调用会涉及到JNI的使用,即使用JAVA代码去调用C或者C++编写的代码,来实现底层硬件的控制。今天做了一个JAVA控制打印机实现编程打印的程序,总结一下经验。

首先说明一下问题,

目的:通过JAVA代码控制打印机打印二维码。

材料、资料:GP3150tl打印机,官方提供的编程指南以及dll函数库,打印机驱动。

问题:实现JAVA调用DLL函数库。

开始考虑JNI的方法,但是很困难。网上查资料,看到有一个叫做JNative的开源库。通过这个库可以更加方便的调用windows的DLL文件。

下载地址:点击打开链接


使用方法可以看这个博客JAVA调用.dll文件


通过学习这个方法用JAVA代码写出来了调用。但是程序可以初始化打印机,出错是也会有dll库函数发出的报错显示。但是就是无法将文件正常打印出来。


初始化:

n=new JNative("TSCLib.dll","openport");n.setRetVal(Type.INT);n.setParameter(0,Type.STRING,"Gprinter  GP-3150TN");n.invoke();JNative clearbuffer=new JNative("TSCLib.dll","clearbuffer");clearbuffer.invoke();JNative setup=new JNative("TSCLib.dll","setup");setup.setParameter(0, Type.STRING,"40");setup.setParameter(1, Type.STRING,"30");setup.setParameter(2, Type.STRING,"3");setup.setParameter(3, Type.STRING,"10");setup.setParameter(4, Type.STRING,"0");setup.setParameter(5, Type.STRING,"3");setup.setParameter(6, Type.STRING,"0");setup.invoke();
打印代码
JNative barcode=new JNative("TSCLib.dll","barcode");barcode.setParameter(0, Type.STRING, "10");barcode.setParameter(1, Type.STRING, "50");barcode.setParameter(2, Type.STRING, "39");barcode.setParameter(3, Type.STRING, "96");barcode.setParameter(4, Type.STRING, "1");barcode.setParameter(5, Type.STRING, "0");barcode.setParameter(6, Type.STRING, "1");barcode.setParameter(7, Type.STRING, "3");barcode.setParameter(8, Type.STRING, "1234567890");barcode.invoke();

正常的话,应该是运行完后打印出一个barcode(一维码)。


解决方法:一次偶然,在系统弹出一个对话框后我等了好久没点确认,过了一会儿点了之后打印机居然开始打印了(激动)。那个对话框的代码是我无聊加上去的,就是显示一个对话框,然后提示打印机相关信息。如下

                        JNative about=new JNative("TSCLib.dll","about");about.setRetVal(Type.INT);about.setParameter(0, Type.STRING,"1");about.invoke();


我又重新试了几次,发现可以重复。这样是不是说我每次让程序晚一点结束就可以打印???

为了验证我吧那段对话框代码删除,并加上了一段线程延时代码就是我们熟知的:

Thread.sleep(3000);//延时三秒钟

然后运行程序,果然,程序运行结束后,打印机按照我的想法开始打印了!!!

虽然问题这么解决了,但是我具体不知道其中原理,如果有人知道麻烦回复告诉我,谢谢了!!


0 0
原创粉丝点击