1

我有一个 JEdit (BeanShell) 宏,它打开一个特定文件,然后立即将文件保存到我的 c:\temp 文件夹中(这样我就不会意外更新真实文件)。

这是豆壳代码:

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.  

我尝试添加一个while循环来等待,直到 buffer.isLoaded() 它是真的,但这只是进入一个无限循环。
似乎起作用的是弹出一个消息框( Macros.message )。但是,我真的不想进行这种不必要的对话。

我不太了解java,所以如果我犯了菜鸟错误,请告诉我。

更新:

添加了我自己的答案以显示Serhii 的答案指向的代码。

4

3 回答 3

4

你可以试试这个解决方案,打电话VFSManager.waitForRequests();

于 2008-11-17T18:04:15.530 回答
3

这个作品

这是上面Serhii 的答案所指向的代码。

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()的返回值,这已经是Buffer,不需要getBuffer()
  2. 不要调用等待所有请求完成的 VFSManager.waitForRequests(),而只需将 BufferListener 添加到从 jEdit.openFile() 获得的 Buffer 中,然后在此侦听器的 bufferLoaded 方法中进行保存调用:-)
于 2013-09-27T16:38:14.880 回答