Frage

Ich habe eine JEdit (Beanshell) Makro, das dann eine bestimmte Datei öffnet sofort speichert die Datei in meinem c: \ temp-Ordner (so, dass ich nicht aus Versehen die reale Datei aktualisieren kann).

Hier ist die Bean Shell-Code:

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

Das gibt mir die folgende Fehlermeldung:

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.  

Ich habe versucht, eine while-Schleife Hinzufügen zu warten, bis buffer.isLoaded() wahr ist, aber das geht nur in eine Endlosschleife.
Was scheint zu arbeiten, um ein Meldungsfeld ( Macros.message ) Aufspringen. Allerdings habe ich diesen unnötigen Dialog haben, wirklich nicht will.

Ich weiß nicht viel Java, so wenden Sie sich bitte mir sagen, wenn ich ein Rookie Fehler mache.

Update:

meine eigene Antwort hinzugefügt der Code von Serhii der Antwort darauf zu zeigen.

War es hilfreich?

Lösung

Sie können versuchen, diese Lösung , ruft VFSManager.waitForRequests();.

Andere Tipps

Dies funktioniert

Dies ist der Code von Serhii Antwort hingewiesen, oben .

Fügen Sie VFSManager.waitForRequests(); nach dem jEdit.openFile() Befehl.

Voll-Code

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);

Sie können auch tun es weniger fett.

  1. den Rückgabewert von jEdit.openFile () verwenden, ist dies bereits der Puffer, keine Notwendigkeit für GetBuffer ()
  2. Rufen Sie nicht VFSManager.waitForRequests (), die für wartet auf alle Anfragen zu tun, sondern einfach einen BufferListener fügt den Buffer Sie von jEdit.openFile bekamen () und tun Sie in der bufferLoaded Methode dieser Hörer rufen speichern: - )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top