1

特定のファイルを開き、すぐにファイルを c:\temp フォルダーに保存する JEdit (BeanShell) マクロがあります (実際のファイルを誤って更新しないようにするため)。

Bean シェル コードは次のとおりです。

logFilePath = "c:\\temp\\aj.txt";
jEdit.openFile( view , logFilePath );
_buffer = jEdit.getBuffer(logFilePath);
_buffer.save(view,"c:\\temp\\backup.txt",true);

これにより、次のエラーが表示されます。

I/O Error
Each buffer can only execute one input/output operation at a time.  
Please wait until the current operation finishes 
(or abort it in the I/O progress monitor) before starting another one.  

true になるまで待機する while ループを追加しようとしました buffer.isLoaded() が、それは無限ループに入ります。
機能しているように見えるのは、メッセージ ボックス ( ) のポップアップです Macros.message 。しかし、私はこの不必要な対話を本当にしたくありません。

私はJavaをあまり知らないので、初歩的な間違いを犯している場合は教えてください。

アップデート:

Serhiiの回答から指摘されたコードを表示するために、私自身の回答を追加しました。

4

3 に答える 3

4

を呼び出して、この解決策を試すことができますVFSManager.waitForRequests();

于 2008-11-17T18:04:15.530 に答える
3

この作品

これは、上記の Serhii's answerが指すコードです。

VFSManager.waitForRequests(); コマンドの後に追加し jEdit.openFile() ます。

完全なコード

logFilePath = "c:\\temp\\aj.txt";
jEdit.openFile( view , logFilePath );

VFSManager.waitForRequests();

/* 
    VFSManager.waitForRequests();

    jEdit waits then for the file to be completely loaded before continuing 
    ... It's designed for waiting on all 'pending I/O requests'".
*/

_buffer = jEdit.getBuffer(logFilePath);
_buffer.save(view,"c:\\temp\\backup.txt",true);
于 2008-11-18T09:54:02.167 に答える
0

あまり大胆に行うこともできます。

  1. jEdit.openFile() の戻り値を使用します。これは既にバッファです。getBuffer() は必要ありません。
  2. すべてのリクエストが完了するのを待つ VFSManager.waitForRequests() を呼び出さないでください。jEdit.openFile() から取得したバッファに BufferListener を追加し、このリスナーの bufferLoaded メソッドで保存呼び出しを実行してください :-)
于 2013-09-27T16:38:14.880 に答える