Я хотел бы добавить рекомендации из статьи об устранении неполадок оракула .
Исключение в потоке. Эта ошибка не обязательно означает утечку памяти
Возможные причины:
Простая проблема конфигурации , где указанный размер кучи недостаточен для приложения.
Приложение непреднамеренно хранит ссылки на объекты , и это предотвращает сбор мусора.
Чрезмерное использование финализаторов .
Еще один потенциальный источник этой ошибки возникает в приложениях, которые чрезмерно используют финализаторы. Если у класса есть метод finalize, то объекты этого типа не освобождают свое пространство во время сборки мусора
После сборки мусора объекты помещаются в очередь для финализация , которая происходит в более позднее время. финализаторы выполняются потоком демона, который обслуживает очередь финализации. Если поток финализатора не может идти в ногу с очередью финализации, тогда куча Java может заполниться, и будет выдан исключительный тип OutOfMemoryError .
Один сценарий, который может вызвать эту ситуацию, - это когда приложение создает высокоприоритетные потоки , которые вызывают увеличение очереди финализации со скоростью, превышающей скорость в котором поток финализатора обслуживает эту очередь.
Чтобы сохранить позицию курсора, сделайте резервную копию input.selectionStart
перед изменением значения.
Проблема в том, что WebKit реагирует на нажатие клавиши
, а Opera предпочитает keypress
, так что есть кладж: и то, и другое обрабатывается и регулируется.
var ignoreKey = false;
var handler = function(e)
{
if (ignoreKey)
{
e.preventDefault();
return;
}
if (e.keyCode == 38 || e.keyCode == 40)
{
var pos = this.selectionStart;
this.value = (e.keyCode == 38?1:-1)+parseInt(this.value,10);
this.selectionStart = pos; this.selectionEnd = pos;
ignoreKey = true; setTimeout(function(){ignoreKey=false},1);
e.preventDefault();
}
};
input.addEventListener('keydown',handler,false);
input.addEventListener('keypress',handler,false);
Я протестировал код, и мне кажется, что он отменяет событие, но если вы не нажимаете стрелку в течение очень короткого времени - запускается событие нажатия клавиши, и это событие фактически перемещает курсор. Просто используйте preventDefault () также в обработчике событий нажатия клавиш, и все будет хорошо.
Наверное, нет. Вместо этого вам следует искать решение, чтобы переместить курсор обратно в конец поля, где он был. Эффект будет таким же для пользователя, поскольку он слишком быстр для восприятия человеком.
Я погуглил кое-что и нашел этот фрагмент кода. Я не могу протестировать его сейчас, и говорят, что он не работает в IE 6.
textBox.setSelectionRange (textBox.value.length, textBox.value.length);