如题,如何用JAVA搜索局域网中存在的打印机
我试了下JAVA里面带的javax.print里面的PrintService ,可以查出,但那是已安装了打印驱动的
import javax.print.PrintService;
import javax.print.PrintServiceLookup;public class PrintTest { PrintService[] service = PrintServiceLookup.lookupPrintServices(null,null); 

private void print(){

for(int i=0;i<service.length;i++){

System.out.println(service[i].getName());

}

}
public static void main(String[] args){
new PrintTest().print();
}}
现在就是想,一台什么都没做过的电脑上,通过java程序搜索到局域网中存在的打印机。如何实现?

解决方案 »

  1.   

    打印机的硬件识别功能
    或把打印机的驱动改成JAVA实现,且在你的主机上实现
      

  2.   

    PrintServiceLookup.lookupPrintServices只是查找已经在本机注册的打印机,包括本地打印机和网络上的打印机。而不是说查找“已安装了打印驱动的”。
    对于Windows系统,所有已经添加的打印机均会注册到注册表中:HKEY_CURRENT_USER/Printers。
    同样,对于UNIX系统而言,所有的外设包括打印机也会在系统中注册。
    PrintServiceLookup.lookupPrintServices只是查找这些已在本机注册的打印机而已。对于楼主的问题,我也无能为力。但Windows下有这样的服务Server。
    支持计算机通过网络的文件、打印、和命名管道共享。当然也不觉得这样的功能有什么实际意义。要使用网络上共享的打印机,一般都需要用户名、密码,也就是说你能获得的也是特定的打印机。那还不如按正常流程,先在本机注册,然后再使用,同时添加时尽量使用主机名,而不是IP,以降低对网络环境的依赖
      

  3.   

    多谢楼上解答,
    那我现在要实现的是打开软件能扫描出局域网里所有的打印机,然后根据需要操作对应的打印机,是不是java不怎么好实现了?
      

  4.   

    god,你这都是什么问题阿?实用软件开发吗?
    不懂了。
      

  5.   

    所有的硬件有系统管理(好像是spooling技术来着?嘿),你只能想办法向系统申请资源,而又象java这种上层的语言,估计实现起来够呛。
      

  6.   

    这个不得不提到SNMP 所有打印机都实现了SNMP协议,你可以1.先确认打印机所在的网段,把网段所有IP获取到。
    2.通过向每个IP地址发送SNMP Get/GetNext等命令获取 pring-mib库中的节点信息,能获取到就是打印机,获取不到就是别的机器推荐SNMP4J包。