0

サードパーティのdll(JTwainから)がパッケージ化されたアプレットがあります。私のアプレットは、TWAIN互換のデフォルトプリンタからドキュメントをスキャンします。アプレットは紙詰まりで失敗し、回復しません。ユーザーがページから離れると、アプレットが破棄されます。ページに戻ると、再び失敗します。ブラウザを閉じて(PC上のjava.exeプロセスを強制終了します)、ページに戻ると問題が解決し、すべてが機能します。

ユーザーがブラウザを閉じなくても、すべてを再起動したい。アプレットリソースがロードされるURLにGUIDクエリ文字列を追加したので、何もキャッシュされていないことがわかります。Windowsタスクマネージャーをチェックインしましたが、dllによって作成されたプロセスはありません。すべて、メインのjava.exeプロセス内で発生しています。スキャンプロセスをスレッドでラップして、stopメソッドまたはdestroyメソッドで中断できるようにしました(アプレットが破棄されたときにアプレットスレッドが停止されなかった場合に備えて)が、うまくいきませんでした。

任意の提案をいただければ幸いです。理想的には、アプレットがアンロードされたときにJavaを再起動する方法が必要です(ただし、それが可能かどうかは疑問です)。

アップデート

アプレットが失敗する原因を特定するために、数日を費やしました。私はまだ知りません:(

紙詰まりが発生すると(私のコードではありません)、いくつかのポップアップが表示されます。1つ目は、ユーザーに紙詰まりを警告し、[OK]ボタンをクリックして閉じることができます。2つ目は、「デバイスからの読み取り」と表示され、ハングします。上隅にある赤いウィンドウを閉じるアイコンで閉じることはできません。タスクマネージャーから削除すると、ウィンドウは「応答しないプログラム」に関するレポートを送信するように要求します。これらのポップアップはdllによって生成されると思います。そして、2番目がハングすることを考えると、私の仮定は、dllによって開始されたスレッドが、TWAINアプリケーションの一部のコンポーネントのロックを保持したままハングしたことです。私は得る

com.asprise.util.jtwain.JTwainException: Failed to open the specified data source:
    Source: TW-Brother MFC-9970CDW LAN Thrown

..スキャナーにアクセスしようとしたとき。

どうすればもっと情報を得ることができるのか、少し戸惑っています。私は(ie7を使用するために)Windows Virtual PCでアプレットをテストしていますが、この環境でステップデバッグする方法がありません。(そして、とにかくソースがないサードパーティのコードでクラッシュしています)

4

1 に答える 1

1

ここには2つの実用的なオプションしかありません。

  1. 紙詰まりを問題なく処理するAPIを使用します。もちろん、それは言うのは簡単で(堅牢なAPIを取得する)、見つけるのは難しいです。
  2. アプリを起動します。JavaWebStartを使用してフリーフローティングします。フリーズした場合、ユーザーはそれを強制終了して、新しいJVM内の別のインスタンスのリンクをクリックできます。BasicService.showDocument(URLof.jnlp)または、アプレットがDLLの問題を検出でき、それ自体がフリーズしていない場合にも、アプレットが呼び出す可能性があります。

もちろん、バグを..Asprise(?)開発者にも報告する必要があります。最適な解決策は、問題の原因を修正することです。ここで行うことはすべて「回避策」です。

于 2012-09-07T13:20:32.087 に答える