2012-04-27 34 views
5

Korzystam z kodu Java pokazanego poniżej, aby wydrukować plik tekstowy na drukarce USB HP DeskJet1000 podłączonej do mojego komputera. Po uruchomieniu tego kodu wysyłane jest zadanie drukowania, ale drukarka niczego nie drukuje. Status pokazuje, że drukarka drukuje, ale nie pobiera nawet strony. Proszę pomóż! Mój kod jest następujący:Kod java nie działa

package printing; 

import java.io.FileInputStream; 
import javax.print.*; 
import javax.print.attribute.HashPrintRequestAttributeSet; 
import javax.print.attribute.PrintRequestAttributeSet; 

/** @author Majid */ 
public class Printing { 
    public static void main (String [] args) { 
     // TODO code application logic here 
     DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
     /* locate a print service that can handle it */ 
     PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset); 
     /* create a print job for the chosen service */ 
     int printnbr = 0; 
     DocPrintJob pj = pservices [printnbr].createPrintJob(); 
     try { 
      FileInputStream fis = new FileInputStream ("e:/fypdatabase/test.txt"); 
      Doc doc = new SimpleDoc (fis, flavor, null); 
      //PrintJobWatcher pjDone = new PrintJobWatcher (pj); 
      /* print the doc as specified */ 
      pj.print (doc, aset); 
     } 
     catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

działa drukarki z innego aplikacje (takie jak Word lub Notepad)? – Jeffrey

+0

tak, to doskonale drukuje ze wszystkich innych aplikacji. –

+1

Nie sprawdzasz, ile usług drukowania jest zwracanych, po prostu twardy kod do korzystania z indeksu 0? (Zastanawiam się tylko, czy masz na przykład zainstalowaną pseudo drukarkę) – Benj

Odpowiedz

0

Twój kod działa. Ale prawdopodobnie próbujesz drukować na drukarce złym ...

spróbować tego:

package printing; 

import java.io.FileInputStream; 
import javax.print.*; 
import javax.print.attribute.HashPrintRequestAttributeSet; 
import javax.print.attribute.PrintRequestAttributeSet; 

/** @author Majid */ 
public class Printing { 

    public static void main (String [] args) { 
     // TODO code application logic here 
     DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
     /* locate a print service that can handle it */ 
     PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset); 

     try { 
      int printer = getPrinter(pservices); 
      if(printer == -1) { 
       throw new Exception("No network printer found"); 
      } 
      DocPrintJob pj = pservices[2].createPrintJob(); 
      FileInputStream fis = new FileInputStream ("c:/Temp/test.txt"); 
      Doc doc = new SimpleDoc (fis, flavor, null); 
      pj.print (doc, aset); 
     } 
     catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

    private int getPrinter(PrintService[] pservices) { 
     int printer = -1; 
     for(int i = 0; i<pservices.size(); i++) { 
      if(pservices[i].getName().contains("\\\\")) { 
       System.out.println("network printer: " + pservices[i].toString()); 
       printer = i; 
       break; 
      }   
     } 
     return printer; 
    } 
} 
1

@ moskiteau dlaczego trudno kod [2] w

DocPrintJob pj = pservices[2].createPrintJob(); 

zamiast uzyskiwanie wartość drukarki jako indeks pservices '?

DocPrintJob pj = pservices[printer].createPrintJob(); 

(im przykro, jeśli to existing odpowiednie miejsce do wyjaśnienia tej kwestii, ale to jest mój pierwszy tutaj pytanie i zrobił dowiedzieć jak zapytać to w inny sposób)