Имея & AWQ-EventQueue-0 & rdquo; java.lang.StackOverflowError с определенным набором переменных [duplicate]

Простой загрузчик Ajax - это еще одна опция:

https://github.com/LPology/Simple-Ajax-Uploader

  • Cross -browser - работает в IE7 +, Firefox, Chrome, Safari, Opera
  • Поддерживает несколько одновременных загрузок - даже в браузерах, отличных от HTML5
  • Нет Flash или внешнего CSS - просто один файл 5Kb Javascript
  • Необязательная встроенная поддержка полнопроходных баров (с использованием расширения PHP APC)
  • Гибкий и настраиваемый - используйте любой элемент в качестве кнопки загрузки, стиль ваших собственных индикаторов прогресса
  • Не требуется никаких форм, просто укажите элемент, который будет использоваться в качестве кнопки загрузки
  • Лицензия MIT - бесплатно использовать в коммерческом проекте

Пример использования:

var uploader = new ss.SimpleUpload({
    button: $('#uploadBtn'), // upload button
    url: '/uploadhandler', // URL of server-side upload handler
    name: 'userfile', // parameter name of the uploaded file
    onSubmit: function() {
        this.setProgressBar( $('#progressBar') ); // designate elem as our progress bar
    },
    onComplete: function(file, response) {
        // do whatever after upload is finished
    }
});

7
задан Łukasz Rzeszotarski 26 November 2012 в 13:22
поделиться

5 ответов

Вам нужно сформировать теорию, почему вы считаете, что алгоритм заканчивается. В идеале доказать теорию как математическую теорему.

Вы можете искать функцию состояния проблемы, которая уменьшает каждый рекурсивный вызов. Например, см. Следующее обсуждение функции Аккермана, из Wikipedia

Не может быть сразу очевидно, что оценка A (m, n) всегда завершается. Однако рекурсия ограничена, поскольку в каждом рекурсивном приложении либо m уменьшается, либо m остается неизменным и n уменьшается. Каждый раз, когда n достигает нуля, m уменьшается, поэтому m в конечном итоге также достигает нуля. (Выражение более технически, в каждом случае пара (m, n) уменьшается в лексикографическом порядке по парам, что является упорядоченным, как и порядок одиночных неотрицательных целых чисел, что означает, что в упорядочении бесконечно много раз подряд.) Однако, когда m уменьшается, нет верхней границы того, сколько n может увеличиться - и оно часто будет сильно возрастать.

Это тип рассуждений, которые вы должны подумайте о применении к вашему алгоритму.

Если вы не можете найти способ доказать, что ваш алгоритм завершен, попробуйте найти вариант, окончание которого вы можете доказать. Не всегда возможно решить, завершается ли произвольная программа или нет. Трюк заключается в том, чтобы написать алгоритмы, которые вы можете подтвердить.

3
ответ дан Patricia Shanahan 25 August 2018 в 17:10
поделиться

Одно из предложений следующее:

Если у вас бесконечный цикл, то в случае графа вы получите путь с числом вершин, большим, чем общее число вершин в графе. Предполагая, что число вершин в графе является глобальной переменной (которая, я думаю, является наиболее распространенным случаем), вы можете сделать условную точку останова в начале рекурсии, если глубина уже превышает общее количество вершин.

Вот ссылка , как вы выполняете условные точки останова для java в Eclipse.

0
ответ дан Boris Strandjev 25 August 2018 в 17:10
поделиться

Наилучшим является , доказывающее конечность пред и пост-условиями, вариантами и инвариантами. Если вы можете указать (виртуальную) формулу, значение которой увеличивается при каждом вызове, у вас есть гарантия.

Это то же самое, что и завершающие циклы. Кроме того, это может сделать сложные алгоритмы более доступными.

3
ответ дан Joop Eggen 25 August 2018 в 17:10
поделиться

Вам нужно подсчитать глубину рекурсивных вызовов ... и затем выбросить исключение, если глубина рекурсивных вызовов достигает определенного порога.

Например:

void TheMethod(object[] otherParameters, int recursiveCallDepth)
{
   if (recursiveCallDepth > 100) { 
      throw new Exception("...."); }
   TheMethod(otherParameters, ++recursiveCallDepth);
}
1
ответ дан Mateusz Chromiński 25 August 2018 в 17:10
поделиться

, если вы хотите проверить бесконечные циклы,

напишите System.out.println("no its not endless"); на следующей строке вызова рекурсивной функции.

, если цикл будет бесконечным, это утверждение не получит печать, если в противном случае вы увидите вывод

1
ответ дан Mukul Goel 25 August 2018 в 17:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: