Question

J'ai une macro JEdit (BeanShell) qui ouvre un fichier spécifique puis enregistre immédiatement le fichier dans mon dossier c: \ temp (afin que je ne mette pas à jour accidentellement le fichier réel).

Voici le code shell du bean:

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

Cela me donne l'erreur suivante:

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.  

J'ai essayé d'ajouter une boucle while pour attendre que buffer.isLoaded () soit à true, mais cela passe simplement dans une boucle infinie.
Ce qui semble fonctionner est de faire apparaître une boîte de message ( Macros.message ). Cependant, je ne veux vraiment pas avoir ce dialogue inutile.

Je ne sais pas beaucoup de java, alors dites-moi s'il vous plaît si je commets une erreur de recrue.

Mise à jour:

Ajout de ma propre réponse pour afficher le code pointé dans la réponse de Serhii .

Était-ce utile?

La solution

Vous pouvez essayer cette solution , en appelant VFSManager. waitForRequests (); .

Autres conseils

Cela fonctionne

C'est le code indiqué par la réponse de Serhii , ci-dessus. .

Ajouter VFSManager.waitForRequests (); après la commande jEdit.openFile () .

Code complet

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

Vous pouvez également le faire moins gras.

  1. utilisez la valeur de retour de jEdit.openFile (), c’est déjà le tampon, pas besoin de getBuffer ()
  2. N'appelez pas VFSManager.waitForRequests () qui attend toutes les demandes, mais ajoutez simplement un BufferListener au tampon que vous avez obtenu de jEdit.openFile () et effectuez votre appel de sauvegarde dans la méthode bufferLoaded de cet écouteur: - )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top