Полагаю, вы захотите изменить код сохранения XML с:
try
{
s.open(f,flash.filesystem.FileMode.WRITE);
s.writeUTFBytes(xml.toXMLString());
s.close();
}
catch(e:Error){}
Для
try
{
s.open(f,flash.filesystem.FileMode.WRITE);
s.writeUTFBytes(xml.toXMLString());
} catch(e:Error) {
logger.error( e );
} finally {
s.close();
}
Если произойдет ошибка, вы ее никогда не увидите, поскольку блок catch просто игнорирует ее. Если у некоторых людей происходит ошибка, поток никогда не записывается. Также вызов close никогда не выполняется, поэтому файл остается открытым. Размещение вызова close () в блоке finally гарантирует, что файл будет закрыт независимо от того, успешен он или нет. Это не гарантия того, что это ваша проблема, но теоретически это потенциальные ловушки, которые могут возникнуть у некоторых пользователей.
Также вы можете захотеть закрыть файл после прочтения.
var s:FileStream = new FileStream();
try {
s.open(f,flash.filesystem.FileMode.READ);
var xml:XML = XML(s.readUTFBytes(s.bytesAvailable));
...
} finally {
s.close();
}
Возможно, ему не удалось сохранить местоположение окна при выходе, поскольку он не может открыть файл для записи, поскольку он все еще открыт для чтения.
Я бы также порекомендовал начать записывать эти ошибки в файл журнала, чтобы выяснить, может ли ошибка быть виновником. AIR имеет довольно хорошую систему регистрации, которую вы можете использовать очень похожую на log4j. Когда у людей возникают проблемы, вы можете просто попросить их отправить вам этот файл журнала и получить более точные отзывы о том, что происходит в их программе для их ситуации. Регистрация в любом серьезном приложении обязательна.
Не говоря уже о том, что вы можете использовать такие приложения, как XPanelOnAIR, чтобы получать сообщения журнала, которые происходят во время отладки. Гораздо лучше, чем trace ().
http://www.novio.be/blog/?p=920
http://livedocs.adobe.com/flex/3/html/help.html?content=logging_09.html
Удалены ссылки на flush (), поскольку в AIR таких вызовов нет.