2009-09-07 8 views
2

Je crée une interface graphique en swing Java. Je dois utiliser un bouton "Imprimer" qui va directement lancer l'impression du fichier que j'ai défini sans ouvrir la boîte de dialogue Imprimer par défaut. Je dois d'abord vérifier si l'imprimante est connectée à mon ordinateur ou non?Comment détecter si l'imprimante est connectée à votre ordinateur ou non en Java?

+1

Je voulais juste dire que si cette interface graphique est juste pour votre usage personnel, c'est bien. Mais si vous envisagez de l'utiliser, il est mauvais de décider pour l'utilisateur quelle imprimante utiliser. Pourrait aller à la 36 "traceur Aussi, votre dernière phrase est une déclaration avec un point d'interrogation à la fin.Il n'est pas vraiment une question? – Zwergner

+0

Juste terminé ma réponse pour vérifier si l'imprimante est connectée – VonC

Répondre

1

Peut-être utiliser PrintServiceLookup?

Les implémentations de cette classe fournissent des services de recherche pour les services d'impression (généralement équivalents aux imprimantes) d'un type particulier.

DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT; 
PrintRequestAttributeSet aset = new HashPrintRequestHashAttributeSet(); 
aset.add(MediaSizeName.ISO_A4); 
PrintService[] pservices =PrintServiceLookup.lookupPrintServices(flavor, aset); 
if (pservices.length > 0) { 
    DocPrintJob pj = pservices[0].createPrintJob(); 
    //.... 
} 

Note: le nombre de PrintService devrait être d'au moins un ssi il existe une imprimante. Potentiellement au moins 2 s'il y a une imprimante réelle, puisque vous pouvez installer des imprimantes logicielles sur votre ordinateur. Voir aussi this thread.

En fonction de la plate-forme et jdk, il peut avoir some bug, mais sinon, la méthode suivante est censé indiquer au moins les imprimantes:

import java.awt.print.*; 
import javax.print.*; 
import javax.print.attribute.*; 
import java.text.*; 
import javax.print.attribute.standard.*; 

public class ShowPrinters { 

    public ShowPrinters() { 
    } 

    public static void main(String[] args) { 
     DocFlavor myFormat = DocFlavor.SERVICE_FORMATTED.PRINTABLE; 
     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
     PrintService[] services =PrintServiceLookup.lookupPrintServices(myFormat, aset); 
     System.out.println("The following printers are available"); 
     for (int i=0;i<services.length;i++) { 
      System.out.println(" service name: "+services[i].getName()); 
     } 
    } 
} 

Dans ce eclipse code source, vous voir l'utilisation de PrinterState pour vérifier si l'imprimante est réellement connectée:

AttributeSet attributes = new HashPrintServiceAttributeSet(
    new PrinterName(printerName, Locale.getDefault())); 
PrintService[] services = PrintServiceLookup.lookupPrintServices(
    DocFlavor.SERVICE_FORMATTED.PRINTABLE, 
    attributes); 
PrintService printService = services[0]; 
PrintServiceAttributeSet printServiceAttributes = printService.getAttributes(); 
PrinterState printerState = (PrinterState) printServiceAttributes.get(PrinterState.class); 

Vérifiez si printerState n'est pas null. Remarque: cela peut ne pas être toujours suffisant (voir this thread).

+0

Oui, je reçois le nom de l'imprimante ici, mais mon imprimante n'est pas physiquement attaché à mon ordinateur.Comment devrais-je vérifier avant de procéder? –

+0

Je pense que tant que l'imprimante a été "installée" sur la boîte, il devrait être disponible via le ci-dessus code s'il s'agit d'une imprimante locale ou réseau.Je voudrais le tester, mais je ne ai aucune option disponible pour le moment. :-) – cjstehno

+0

@VonC savez-vous pourquoi printerState peut être toujours nulle même imprimante est allumé et effectivement connecté ? – whizzzkey

Questions connexes