2016-07-20 12 views
2

私は、プリンタを含むJavaFXアプリケーションを開発しています。しかし、アプリケーションの実行中に、最近作成または削除されたプリンタ(切断または接続)をアプリケーションが検出できるように、更新ボタンを作成する必要があります。Javafxは利用可能なプリンタの変更を検出しません

PS:

Printer.getAllPrinters()は、私が欲しいものを取得しますが、それは私の更新ボタンは無用であることを意味し、変化を検出する前に再起動するアプリケーションを必要とします。

編集1:PrinterクラスのAPI-DOCから

public void updateAvailablePrinters() { 
    printers = FXCollections.observableArrayList(); 
    ObservableSet<Printer> allPrinters = Printer.getAllPrinters(); 
    allPrinters.forEach(printer -> printers.add(printer)); // printers is a field variable 
} 
+0

ドゥあなたは欠陥のあるコードのサンプルを持っていますか?エラー(つまり、スタックトレースを共有する)が発生しますか? –

+1

@ HEADLESS_0NEが追加されましたコードサンプル –

答えて

1

利用可能なプリンタサービスを表示するには、JavaFX Printerの代わりにlookupPrintServices methodjavax.print.PrintServiceLookupにしようとするとよいでしょう。

利用可能なプリンタのリストを取得するために次のスニペットを使用しましたが、Applicationの実行中にプリンタの追加/削除が検出されたようです。

System.out.println("Print services: " + printServices.length); 

for (PrintService printer : printServices) 
    System.out.println("Printer: " + printer.getName()); 

それとも、単に実際の印刷の前にプリンタを選択するユーザーができるようにしたい場合は、あなたがプリンタリストも更新されたダイアログのようPrinterJobshowPrintDialogを使用できます。

PrinterJob job = PrinterJob.createPrinterJob(); 
if (job != null && job.showPrintDialog(stage)){ 
    boolean success = job.printPage(stage.getScene().getRoot()); 
    if (success) { 
     job.endJob(); 
    } 
} 
+1

showPrintDialogの問題は、プリンタがオンラインである場合に表示されないことです。 – NwDev

+0

@DVargaこれは私が必要とする解決策です。どうもありがとう :) –

1

:プリンタの可用性が原因管理アクションに、 の実行プログラム中に変更される可能性があるため

、 がオフラインになっているプリンタをキャッシュしている長時間実行中のプログラムは、そのインスタンスを使用して ジョブを作成することがありますが、印刷は失敗します。

JavaFXで簡単に実行できる方法はないようです。あなたができることは、PrintJob.JobStatusを印刷してみてください。失敗した場合、プリンタはオフラインになっているか、もうインストールされていません。その後、別のプリンタを選択することができます。

+0

回避策が有効ですが、効率的で、オプション画面に入っていて、次に更新ボタンが押され、回避策が実行されたとします。 –

+0

@AbdElraoufSabri良い回避策はありません。利用可能なプリンタの読み込みはネイティブメソッドなので、OSに依存します。したがって、印刷は異なる方法で扱われます。 Windowsでは、プリンタが接続されていない場合でも、ジョブごとにスケジュールされたPrintQueueが表示されます。だから、おそらくあなたの場合、ユーザーは他のアプリケーションのように(アクティブな)プリンタを手動で選択できるはずです。 – NwDev

+0

よろしくお願いいたします。だから、私はそれが役に立たないので、更新ボタンを削除するつもりです:) –

関連する問題