使用 Java communications API 实现并行端口打印

使用 Java communications API 实现并行端口打印
 
这是一个在客户支持中遇到的新问题,我在相关的网站 ([url]www.rxtx.org[/url] and [url]www.sun.com.cn[/url]) 上找到了一些有用的信息,最后终于在 Windows XP LinuxIA32 平台下实现并行端口打印这一功能。
 
首先,我们要从 SUN 的网站下载 Java communications API 最新的包 (javacomm20-win32.zip) ,然后解压缩在 commapi 目录下,进入 commapi 目录中,我们可以看到 win32com.dll comm.jar javax.comm.properties 三个文件。在正确使用 Java communications API 之前,我们必须先配置 Java communications API JDK 1.4.2 运行环境中。我们假定 JDK1.4.2 的安装目录为 "C:\java142"
 
1. 复制 win32com.dll C:\java142\bin
2. 复制 comm.jar C:\java142\jre\lib\ext
3. 复制 javax.comm.properties C:\java142\jre\lib javax.comm.properties 一定要安装,否则,我们将找不到系统中的任何并行端口。
 
现在,我们已经完成了 comm.jar 的安装工作,可以测试我们的程序了。下面我将给出我写的一个简单的例子: SimpleLPTPort.java
 
---------- BEGIN SOURCE ----------
import java.io.*;
import java.util.*;
import javax.comm.*;
public class SimpleLPTPort  {
       Enumeration ports;
       CommPortIdentifier portId;
      
       ParallelPort LPTPort;
      
    protected OutputStream out;
   
    String outPrintStr = "When an \n\rinput method \n\ris activated, ";
       public SimpleLPTPort() {
              checkLPTPort();
       }
      
       public void checkLPTPort() {
             
              ports = CommPortIdentifier.getPortIdentifiers();
             
              if (ports == null) {
                     System.out.println("No comm ports found!");
                     System.exit(0);
              }
             
              while (ports.hasMoreElements()) {
                     // Get the specific port
                     portId = (CommPortIdentifier)ports.nextElement();
                    
                     // Is this a parallel port?
                     if (portId.getPortType() == CommPortIdentifier.PORT_PARALLEL) {
                            // Is the port in use?
                            if (portId.isCurrentlyOwned()) {
                                   System.out.println("Detected "
                                                                      + portId.getName()
                                                                      + " in use by "
                                                                      + portId.getCurrentOwner());
                            }
                           
                            // Try to open the port.
                            try {
                                  
                                   try {
                                          //for(int i = 0; i <=2; i++) {
                                                 LPTPort = (ParallelPort)portId.open("ParallelPort", 2000);
                                                
                                                 System.out.println(LPTPort.getName() + " a LPT port is opened.");
                                                
                                                 if (LPTPort == null) {
                                                        System.out.println("Error opening LPT port "
                                                        + LPTPort.getName());
                                                 }
                                                
                                                 // Get the output stream                                          
                                                 try
                                                 {
                                                        out = LPTPort.getOutputStream();
                                                 }
                                                
                                                 catch (IOException e)
                                                 {
                                                        System.out.println("Cannot open output stream");
                                                 }
                                                
                                                 out.write(outPrintStr.getBytes()); 
                                                 System.out.println(outPrintStr.getBytes());
                                                 LPTPort.close();
                                                 System.out.println(LPTPort.getName() + " is closing.");
                                          //}
                                          System.out.println("Output stream complete.");
                                          //LPTPort.close();
                                          System.exit(0);
                                         
                                   } catch (IOException ex) {
                                          System.out.println("Output stream fail.");
                                          System.out.println(LPTPort.getName()
                                                                             + ": Cannot write to output stream");
                                          LPTPort.close();
                                          System.exit(0);
                                   }
                           
                            } catch (PortInUseException e) {
                                   System.out.println("Queueing open for "
                                                                     + portId.getName()
                                                                     + ": port in use by "
                                                                    + e.currentOwner);
                            }
                     }
              }
             
       }
      
       public static void main(String[] args) {
              new SimpleLPTPort();
       }
      
}
---------- END SOURCE ----------
打开一个 DOS 控制窗口,先编译 SimpleLPTPort.java --> "javac SimpleLPTPort.java",
然后,我们运行该程序 --> "java SimpleLPTPort" 。如果一切都顺利的话,我们将在控制窗口看到以下的输出:
-------------------------------------
C:\fanjun\jcase\LPRPort>javac SimpleLPTPort.java
 
C:\fanjun\jcase\LPRPort>java SimpleLPTPort
LPT 1 a LPT port is opened.
When an
input method
is activated,
LPT1 is closing.
Output stream complete.
-------------------------------------
* LPT1 是程序检测到的系统可用的并行端口
 
如果在你的并行端口连接着打印机,这时将会打印出一页,内容为:
---------------------------------
When an
input method
is activated,
---------------------------------
 
现在,我们来理解一下上面的代码。
 
4 行:“ import javax.comm.*; 引入 Java communications API
 
21 行:“ ports = CommPortIdentifier.getPortIdentifiers(); 得到系统的端口列表
 
33 行:“ portId.getPortType() == CommPortIdentifier.PORT_PARALLEL 从端口列表中找出可用的并行端口
 
47 行:“ LPTPort = (ParallelPort)portId.open("ParallelPort", 2000); 打开并行端口
 
62 行:“ out = LPTPort.getOutputStream(); 获得并行端口输出流
 
70 行:“ out.write(outPrintStr.getBytes()); 向并行端口写数据
 
83 行:“ LPTPort.close(); 关闭并行端口
 
我写的例子是向并行端口输出了一个字符串,当然,我们也可以向并行端口输出一个文件流,我已经在 Windows XP 系统下成功地测试过了,我成功地向并行端口输出了一个文件流,并且在打印机端得到了正确的输出。

你可能感兴趣的:(java,api,休闲,communications,并行端口打印)