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

Python010

java 调用动态库问题。动态库中 printf函数不能及时打印,第1张

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

调用dll需要用JNI技术

java自带有打印的支持,在javax.print包里

典型的应用程序使用 Java Print Service API 执行以下步骤来处理打印请求:

选择一个 DocFlavor。

创建一个属性集。

找到一个可处理由 DocFlavor 和属性集所指定的打印请求的 PrintService。

创建一个 Doc 对象,该对象封装 DocFlavor 和实际的打印数据,这些打印数据可采用很多形式,包括:Postscript 文件、JPEG 图像、URL 或纯文本。

从 PrintService 获得一个由 DocPrintJob 表示的 PrintJob。

调用 PrintJob 的 print 方法

以下代码示例说明了 Java Print Service API 的典型用法:找到可在 A4 大小的纸张上打印 5 份 Postscript 文档双面副本的打印机、根据某个返回的 PrintService 创建 PrintJob 并调用 print 方法。

FileInputStream psStream

try {

psStream = new FileInputStream("file.ps")

} catch (FileNotFoundException ffne) {

}

if (psStream == null) {

return

}

DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT

Doc myDoc = new SimpleDoc(psStream, psInFormat, null)

PrintRequestAttributeSet aset =

new HashPrintRequestAttributeSet()

aset.add(new Copies(5))

aset.add(MediaSize.A4)

aset.add(Sides.DUPLEX)

PrintService[] services =

PrintServiceLookup.lookupPrintServices(psInFormat, aset)

if (services.length >0) {

DocPrintJob job = services[0].createPrintJob()

try {

job.print(myDoc, aset)

} catch (PrintException pe) {}

}

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里面实现的功能(方法)。