2016-04-26 8 views
3

ライブラリを使用して、.docxから.pdfに一部のドキュメントを変換するコードを書きました。LocalConverterを管理する方法とShutDown()メソッドを呼び出す方法は?

私はドキュメントの例に従っており、変換はMS-Wordを使用して完全に動作しますが、すべての変換が完了してメソッドが戻っても、Javaアプリケーションの結果はまだ実行されていて終了しないようです。私は明示的に​​とshutDown()方法の代わりに、schedule()、アプリケーションの終了を使用してコンバータを閉じて、私は並行モードで、このアプリケーションの実行を必要とするので、私は明示的にshutDown()を起動できない場合

そう私はMS-Wordの終了し、休憩を引き起こしますまだ開いている文書があります。

これらの目的を達成するためにコンバータを使用する最も良い方法は何ですか? LocalConverterには、変換する文書のキューがあるかどうかをチェックする方法がありますか?この情報を使用して、空のキューでshutDown()を呼び出し、次の変換要求で新しいLocalConverterをインスタンス化できます。

ご返信いただきありがとうございます!

ダン

答えて

1

私はdocuments4jの管理者です。

現在、LocalConverterはシャットダウン時に実行中の変換が終了するのを現在待機していません。私は変換を実行するためのタイムアウトに対応する猶予期間を追加しました。この猶予期間は、次のバージョンのdocuments4jに含まれます。スペースを含むフォルダのパスをエスケープして、保留中の問題を調べたら、新しいバージョンをリリースします。

一方、あなた自身で同様のものを実装することをお勧めします。すべての変換はFutureを発信します。 Setですべての先物を収集し、スレッド内のそれぞれの将来についてgetに電話するだけです。すべての変換が同時に行われているが、すべての先物まで、メインスレッドのブロックが完了しているため、上記の

IConverter converter = ...; 
Set<Future<?>> futures = new HashSet<>(); 
for (...) { 
    futures.add(converter.from(...).to(...).schedule()); 
} 
for (Future<?> future : futures) { 
    future.get(); 
} 
converter.shutDown(); 

安全である:すべての先物は、(すなわち、すべての変換が完了している)戻ってきた場合、地元のコンバータをシャットダウンしても安全です。 Future::getは、変換が完了するまでブロックされますが、変換がすでに完了していればすぐに戻ります。この方法で、すべての変換が完了する前にshutDownに到達しないようにします。

+0

こんにちはラファエル、お返事ありがとうございました。では、schedule()メソッドから返されたFuture of Setのセマフォのようなものを使用することをお勧めしますか?あなたの提案によると、私はそのセットにもいくつかの同期メカニズムを使用する必要があります。私は正しい?どのようにあなたはdocuments4jの次のリリースを共有できると思いますか? –

+0

私は今休暇中ですが、今年の夏にはかなり忙しいです。しかし、あまりにも多くの作業をする必要はありません、私は小さなコードの例を追加 –

関連する問題