Это происходит, когда вы пытаетесь получить доступ к ресурсам другого домена.
Это функция безопасности, позволяющая избежать свободного доступа к любым ресурсам этого домена (к которым можно получить доступ, например, для получения точной копии ваш сайт в пиратском домене.)
Заголовок ответа, даже если он 200OK не позволяет другим источникам (доменам, портам) обращаться к ресурсам ressources.
Вы можете исправить эта проблема, если вы являетесь владельцем обоих доменов:
Чтобы изменить это, вы можете записать это в .htaccess запрошенного файла домена:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
Если вы установите это в заголовок ответа запрошенного файла, вы разрешите всем получить доступ к ресурсам ressources:
Access-Control-Allow-Origin : *
ИЛИ
Access-Control-Allow-Origin : http://www.my-domain.com
Мир и код;)
Если Вы просто ищете чрезвычайно точные измерения [1 114] прошедшее время , используйте System.nanoTime()
. System.currentTimeMillis()
даст Вам самое точное прошедшее время в миллисекундах, так как эпоха, но System.nanoTime()
дает Вам точное наносекундой время, относительно некоторой произвольной точки.
Из Документации Java:
public static long nanoTime()
Возвраты текущее значение самого точного доступного системного таймера, в наносекундах.
Этот метод может только использоваться для измерения прошедшего времени и не связан ни с каким другим понятием системы или тактовое стеной время. Возвращенное значение представляет наносекунды с некоторого фиксированного, но произвольного момента времени (возможно, в будущем, таким образом, значения могут быть отрицательными). Этот метод обеспечивает точность наносекунды, но не обязательно точность наносекунды. Никакие гарантии не сделаны о том, как часто значения изменяются. Различия в последовательных вызовах, которые охватывают больше, чем приблизительно 292 года (2 <глоток> 63 глоток> наносекунды) точно не вычислят прошедшее время из-за числового переполнения.
, Например, для измерения, сколько времени некоторый код берет для выполнения:
long startTime = System.nanoTime();
// ... the code being measured ...
long estimatedTime = System.nanoTime() - startTime;
См. также: JavaDoc System.nanoTime () и JavaDoc System.currentTimeMillis () для большего количества информации
Обновление Arkadiy: я наблюдал более корректное поведение System.currentTimeMillis()
в Windows 7 в Oracle Java 8. Время было возвращено с 1 точностью миллисекунды. Исходный код в OpenJDK не изменился, таким образом, я не знаю то, что вызывает лучшее поведение.
David Holmes из Sun отправил статью блога пара несколько лет назад, которая имеет очень подробный взгляд на API синхронизации Java (в особенности System.currentTimeMillis()
и System.nanoTime()
), когда Вы хотели бы использовать, который, и как они работают внутренне.
Внутренняя часть Горячая точка VM: Часы, Таймеры и События Планирования - Первая часть - Windows
One, который очень интересный аспект таймера, используемого Java в Windows для API, которые имеют синхронизированный параметр ожидания, - то, что разрешение таймера может измениться в зависимости от того, чем другие вызовы API, возможно, были сделаны - в масштабе всей системы (не только в конкретном процессе). Он показывает пример, где использование Thread.sleep()
вызовет это изменение разрешения.
Да, если такая точность требуется, используют System.nanoTime()
, но знают, что Вы тогда требуете Java 5 + JVM.
В моих системах XP, я вижу системное время, которое, как сообщают, по крайней мере <ударило> 100 микросекунд забастовка> 278 наносекунды использование следующего кода:
private void test() {
System.out.println("currentTimeMillis: "+System.currentTimeMillis());
System.out.println("nanoTime : "+System.nanoTime());
System.out.println();
testNano(false); // to sync with currentTimeMillis() timer tick
for(int xa=0; xa<10; xa++) {
testNano(true);
}
}
private void testNano(boolean shw) {
long strMS=System.currentTimeMillis();
long strNS=System.nanoTime();
long curMS;
while((curMS=System.currentTimeMillis()) == strMS) {
if(shw) { System.out.println("Nano: "+(System.nanoTime()-strNS)); }
}
if(shw) { System.out.println("Nano: "+(System.nanoTime()-strNS)+", Milli: "+(curMS-strMS)); }
}
System.nanoTime()
не поддерживается в более старом JVMs. Если это - беспокойство, палка с currentTimeMillis
Относительно точности, Вы почти корректны. На НЕКОТОРЫХ машинах Windows, currentTimeMillis()
имеет разрешение приблизительно 10 мс (не 50 мс). Я не уверен, почему, но некоторые машины Windows так же точны как машины Linux.
я использовал GAGETimer в прошлом с умеренным успехом.