Jedit Macro- 파일을 열고 저장합니다
문제
특정 파일을 열어주는 Jedit (Beanshell) 매크로가 있으며 파일을 즉시 C : Temp 폴더에 저장합니다 (실수로 실제 파일을 업데이트하지 않도록).
Bean Shell 코드는 다음과 같습니다.
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.
나는 기다릴 때까지 기다릴 루프를 추가하려고 노력했다. buffer.isLoaded()
사실이지만, 그것은 단지 무한 루프로 들어갑니다.
효과가있는 것 같다는 것은 메시지 상자를 팝업하는 것입니다. Macros.message
). 그러나 나는이 불필요한 대화를하고 싶지 않습니다.
나는 자바를 많이 모른다. 그래서 내가 신인 실수를하고 있는지 말해줘.
업데이트:
내 자신의 답변을 추가하여 Serhii의 대답.
해결책
당신은 시도 할 수 있습니다 이 솔루션, 전화 VFSManager.waitForRequests();
.
다른 팁
이것은 작동합니다
이것은에 의해 지적 된 코드입니다 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);
당신은 또한 그것을 덜 대담하게 할 수 있습니다.
- jedit.openfile ()의 반환 값을 사용하십시오. 이것은 이미 버퍼이며 getbuffer ()가 필요하지 않습니다.
- 모든 요청을 기다리는 vfsmanager.waitforRequests ()를 호출하지 말고 Jedit.openFile ()에서 얻은 버퍼에 버퍼 리스트너를 추가 하고이 리스너의 버퍼로드 메소드에서 저장 호출을 수행하십시오.
제휴하지 않습니다 StackOverflow