Ни один из этих ответов не помог мне, но я нашел решение.
У меня был веб-проект, используемый в Wildfly 8.2, построенный с Maven, для source и target было установлено значение 1.8 на maven-compiler-plugin, а все настройки Eclipse и Maven были установлены на Java 1.8. Проблема состояла в том, что Wildfly 8.2 не может обрабатывать Java 1.8, поэтому мне пришлось установить все на 1.7, и это сработало.
Взгляните на мой ответ на аналогичный вопрос (и другие ответы там) о том, как оценивается оставшееся время в проводнике Windows.
На мой взгляд , есть только один способ получить точные оценки:
Обратите внимание, что первая точка может потребовать довольно много работы, если вы копируете много файлов. Наверное, поэтому ребята из Microsoft решили обойтись без него.
Я сделал нечто подобное, чтобы оценить, когда очередь будет пуста, учитывая, что элементы удаляются из очереди быстрее, чем ставятся в очередь. Я использовал линейную регрессию по последним N показаниям (время, размер очереди).
Это дает лучшие результаты, чем наивный
(bytes_copied_so_far / elapsed_time) * bytes_left_to_copy
Больше всего я бы никогда не отображал секунды (только часы и минуты). Я думаю, это действительно неприятно, когда вы сидите и ждете минуту, пока таймер перескакивает между 10 и 20 секундами. И всегда отображать реальную информацию, например: xxx / yyyy МБ скопировано.
Я бы также включил что-то вроде этого:
if timeLeft> 5h -> Сообщите пользователю, что это может работать неправильно if timeLeft> 10h -> Сообщите пользователю, что могут быть лучшие способы переместить файл if timeLeft> 24h -> Отменить и проверить наличие проблем
Я бы также проинформировал пользователя, если расчетное время слишком сильно различается
И если это не слишком сложно, должна быть функция автоматической проверки, которая проверяет, жив ли процесс и работает ли он правильно каждые 1-10 минут. (в зависимости от приложения).
говоря о сетевом копировании файлов, лучше всего рассчитать размер передаваемого файла, сетевой ответ и т. Д. Один раз я использовал подход:
Скорость соединения = Пинг и вычислить время прохождения туда и обратно для пакетов размером 15 Кбайт.
Получите размер моего файла и посмотрите, теоретически, сколько времени потребуется, если я сломаю его Пакеты по 15 кб, использующие мою скорость соединения.
Пересчитайте мою скорость соединения после начала передачи и скорректируйте время, которое будет потрачено.
Я думаю, что диалоги должны просто признавать свои ограничения. Это не раздражает, потому что он не может дать полезную оценку времени, это раздражает, потому что он авторитетно предлагает оценку, которая является очевидной ерундой.
Итак, оценивайте, как хотите, на основе текущей скорости или средней скорости на данный момент, скользящие средние без выбросов, или что угодно. Зависит от операции и типичной продолжительности событий, которые ее задерживают, поэтому у вас могут быть разные алгоритмы, когда вы знаете, что копия файла включает сетевой диск. Но до тех пор, пока ваша оценка не будет достаточно последовательной в течение периода времени, равного меньшему из 30 секунд или 10% расчетного времени, отображайте «о, боже, кажется, что есть какое-то задержка», когда он значительно замедляется, или просто игнорируйте это, если это значительно ускорилось.
Например, диалоговые сообщения, получаемые с интервалом в 1 секунду, когда соединение ненадолго прерывается:
remaining: 60 seconds // estimate is 60 seconds
remaining: 59 seconds // estimate is 59 seconds
remaining: delayed [was 59 seconds] // estimate is 12 hours
remaining: delayed [was 59 seconds] // estimate is infinity
remaining: delayed [was 59 seconds] // got data: estimate is 59 seconds
// six seconds later
remaining: 53 seconds // estimate is 53 seconds
elapsedTime
». totalCopied
» totalCopied
на totalElapsed
, чтобы получить количество байтов, скопированных за один таймер. интервал (в данном случае 1000 мс). Назовем эту переменную « bytesPerSec
» bytesPerSec
и получим общее количество секунд, теоретически необходимое для копирования этого файла. Назовем эту переменную RemainTime
elapsedTime
из RemainTime
, и вы получите несколько точный расчет времени копирования файла.