對不起延遲迴答,但是我在這裏:)
所以一些修改後,我試圖建立一個隊列就像你說的,一個線程等待前一個文件是打印機管理,但問題是,打印機永遠不會將我的作業完成/失敗/取消。
我在網上搜索了所有內容,沒有辦法找到這個問題的答案。
我也試着開關打印機(永遠不知道...),結果是一樣的,發回的唯一事件是DATA_TRANSFER_COMPLETE和NO_MORE_EVENTS ...
由於以前。
順便說一句,這裏的代碼我其實運行:
的PrintService
package print;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
public class MyPrintService extends Thread {
String name;
public MyPrintService(String name)
{
super(name);
this.name = name;
System.out.println("MyPrintService("+this.name+")");
this.start();
}
public void print()
{
System.out.println("print()");
try {
for (int i = 1; i < 3; i++) {
// Open the image file
InputStream is = new BufferedInputStream(new FileInputStream("D://giulio.provasi//Desktop//"+i+".txt"));
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
// Create the print job
DocPrintJob job = service.createPrintJob();
Doc doc = new SimpleDoc(is, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
// Monitor print job events
PrintJobWatcher pjDone = new PrintJobWatcher();
job.addPrintJobListener(pjDone);
// Print it
job.print(doc, null);
// Wait for the print job to be done
pjDone.waitForDone();
while(i < 10000000) {
System.out.println("le thread n'a pas attendu !");
i++;
}
// It is now safe to close the input stream
is.close();
}
} catch (Exception e) {
}
}
@Override
public void run()
{
System.out.println("run("+this.name+")");
this.print();
}
}
打印監聽
package print;
import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;
public class PrintJobWatcher implements PrintJobListener {
Boolean done = false;
Integer status = 0;
PrintJobWatcher()
{
System.out.println("PrintJobWatcher()");
}
@Override
public void printDataTransferCompleted(PrintJobEvent pje)
{
this.done(PrintJobEvent.DATA_TRANSFER_COMPLETE);
System.out.println("DATA_TRANSFER_COMPLETE");
}
@Override
public void printJobCompleted(PrintJobEvent pje)
{
this.done(PrintJobEvent.JOB_COMPLETE);
System.out.println("JOB_COMPLETE");
}
@Override
public void printJobFailed(PrintJobEvent pje)
{
this.done(PrintJobEvent.JOB_FAILED);
System.out.println("JOB_FAILED");
}
@Override
public void printJobCanceled(PrintJobEvent pje)
{
this.done(PrintJobEvent.JOB_CANCELED);
System.out.println("JOB_CANCELED");
}
@Override
public void printJobNoMoreEvents(PrintJobEvent pje)
{
this.done(PrintJobEvent.NO_MORE_EVENTS);
System.out.println("NO_MORE_EVENTS");
}
@Override
public void printJobRequiresAttention(PrintJobEvent pje)
{
this.done(PrintJobEvent.REQUIRES_ATTENTION);
System.out.println("REQUIRES_ATTENTION");
}
private synchronized void done(Integer status)
{
System.out.println("DONE !");
this.status = status;
this.done = true;
notifyAll();
}
synchronized void waitForDone()
throws InterruptedException
{
System.out.println("AVANT : IMPRESSION EN COURS...");
try {
while (!this.done || ((this.status != PrintJobEvent.JOB_COMPLETE) || (this.status != PrintJobEvent.JOB_FAILED))) {
System.out.println("IMPRESSION EN COURS...");
wait();
}
} catch (InterruptedException e) {}
}
}
啓動
import print.MyPrintService;
public class Main {
public static void main(String[] args)
{
System.out.println("C'est parti !");
MyPrintService test1 = new MyPrintService("1");
}
}
一些代碼如何? – 2010-07-02 20:08:33