J'ai été aux prises avec l' PrintServiceLookup
; lookupPrintServices(DocFlavor flavor, AttributeSet attributes)
méthode est trop lente pour détecter les imprimantes dans notre application avec la course initiale. Les Clients avec plus de 100 imprimantes réseau ont rapporté que les comportements qui s'exécute ce code est mal effectuer la première fois qu'il est exécuté.
Après avoir vu que la recherche de résultats sont mis en cache, j'ai d'abord déployé un mannequin de recherche dans un thread séparé (exécuté au démarrage). Cependant, pour un client particulier, cette solution n'est pas de travail.
Je ne suis pas actuellement ont de leur environnement et ne peut pas voir ce qui est à l'origine de la performance exacte du problème.
Je suis en train de voir si un PrintService
prend en charge une MediaSizeName
sans effectuer une de la DocFlavor
et AttributeSet
. Donc je tire de tout disponible PrintService
s et la valeur par défaut PrintService
:
private static final PrintService[] PRINTSERVICES =
PrintServiceLookup.lookupPrintServices(null, null);
private static final PrintService DEFAULTSERVICE =
PrintServiceLookup.lookupDefaultPrintService();
Et ensuite, obtenir le PrintService
et de la MediaSizeName
de la demande du client. Enfin, je demande à l' PrintService
si l' MediaSizeName
est pris en charge par:
private void checkPrintServiceForMediaSize(PrintService pservice) throws MediaSizeNotSupportedException{
if(!pservice.isAttributeValueSupported(_mediaSizeName,null,null))
throw new MediaSizeNotSupportedException("This media size is not supported by the selected printer.");
}
L' API déclare que lorsqu' isAttributeValueSupported(Attribute attrval,DocFlavor flavor,AttributeSet attributes)
est appelée avec la valeur null DocFlavor
et AttributeSet
cette méthode indique si ce Service d'Impression prend en charge les donné l'impression de la valeur de l'attribut pour certaines combinaisons possibles de doc saveur et un ensemble d'attributs
et s'est comporté correctement jusqu'à maintenant. Cependant, je ne suis pas entièrement sûr si c'est la voie à suivre si une imprimante prend en charge une taille de page sélectionnée.
Je vous serais reconnaissant de vos commentaires et de votre expérience sur cette question.
Mise à jour
Autour du temps j'ai mis en place mon approche, mon poste de travail a décidé d'avoir de graves problèmes de réseau, ce qui m'a pris un certain temps à comprendre. Enfin, mon œuvre a été testé avec l'outil de réseautage SoftPerfect Connexion Émulateur (pour simuler la charge réseau) et les résultats ne se sont pas améliorées de façon significative.
Je vais continuer à tester et à mettre à jour cette question. J'espère pouvoir trouver une solution et de le partager avec des gens d'ici. Je suppose que l'initiale de recherche:
private static final PrintService[] PRINTSERVICES =
PrintServiceLookup.lookupPrintServices(null, null);
est encore à l'origine de problèmes.
Mise à jour 2
La beta build est enfin testé dans l'environnement client et la performance de la boîte de dialogue d'impression est d'environ 5 fois améliorée (l'attraction initiale de l'imprimante en maintenant faut environ 1 minute sous le même environnement, comparativement à environ 5 minutes). Encore la période d'attente initiale n'est pas une quantité acceptable de temps, cependant, est le mieux que je puisse faire pour l'instant. Nous avons également entendu de la part du client d'un serveur d'impression est utilisé et en suivant les suggestions dans les commentaires (@Wardy), je vais être en mouvement dans cette direction. Heureusement, nous pouvons tirer parti des avantages de la fonction de serveur d'impression.