Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Я должен сказать что ни одно из этих решений действительно работа. Я попробовал решение для буфера обмена из принятого ответа, и это не работает с Flash Player 10. Я также попробовал ZeroClipboard, и я был очень доволен им некоторое время.
я в настоящее время использую его на своем собственном сайте ( http://www.blogtrog.com ), но я замечал странные ошибки с ним. Путем ZeroClipboard работает, то, что он помещает невидимый объект флэш-памяти поверх элемента на Вашей странице. Я нашел, что, если мой элемент перемещается (как то, когда пользователь изменяет размер окна и мне выровняли по правому краю вещи), объект флэш-памяти ZeroClipboard добирается в неисправном состоянии и больше не покрывает объект. Я подозреваю, что это, вероятно, все еще находится, где это было первоначально. У них есть код, это, как предполагается, останавливает это или повторно прикрепляет его к элементу, но это, кажется, не работает хорошо.
Так... в следующей версии BlogTrog, я предполагаю, что буду следовать примеру со всеми другими маркерами кода, которые я досмотрел до конца в дикой природе и удаляю свою Копию к кнопке Clipboard. :-(
(я заметил, что Копия dp.syntaxhiglighter к Буферу обмена повреждается теперь также.)
copyIntoClipboard () функционируют работы для Flash 9, но это, кажется, повреждается выпуском Flash player 10. Вот решение, которое действительно работает с новым Flash player:
http://bowser.macminicolo.net/~jhuckaby/zeroclipboard/
Это - сложное решение, но это действительно работает.
Firefox действительно позволяет Вам хранить данные в буфере обмена, но из-за последствий безопасности это отключено по умолчанию. Посмотрите, как включить его в "Предоставляющий доступ JavaScript к буферу обмена" в базе знаний Mozilla Firefox.
решение, предлагаемое amdfan, является лучшим, если Вы имеете много пользователей и настраиваете их браузер, не опция. Хотя Вы могли протестировать, если буфер обмена доступен, и предоставьте ссылку для изменения настроек, если пользователи технически подкованы. Редактор JavaScript TinyMCE следует за этим подходом.
Из соображений безопасности Firefox не позволяет Вам помещать текст в буфер обмена. Однако существует обходное решение доступный Flash использования.
function copyIntoClipboard(text) {
var flashId = 'flashId-HKxmj5';
/* Replace this with your clipboard.swf location */
var clipboardSWF = 'http://appengine.bravo9.com/copy-into-clipboard/clipboard.swf';
if(!document.getElementById(flashId)) {
var div = document.createElement('div');
div.id = flashId;
document.body.appendChild(div);
}
document.getElementById(flashId).innerHTML = '';
var content = '<embed src="' +
clipboardSWF +
'" FlashVars="clipboard=' + encodeURIComponent(text) +
'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
document.getElementById(flashId).innerHTML = content;
}
единственный недостаток - то, что это требует, чтобы Flash был включен.
источник в настоящее время мертв: http://bravo9.com/journal/copying-text-into-the-clipboard-with-javascript-in-firefox-safari-ie-opera-292559a2-cc6c-4ebf-9724-d23e8bc5ad8a/ (и так, это кэш Google )
Создавая от превосходного ответа из @David от Студии 201, это работает в Safari, FF и Chrome. Это также гарантирует, что никакое высвечивание не могло произойти от textarea
путем размещения его вне экрана.
// ================================================================================
// ClipboardClass
// ================================================================================
var ClipboardClass = (function() {
function copyText(text) {
// Create temp element off-screen to hold text.
var tempElem = $('<textarea style="position: absolute; top: -8888px; left: -8888px">');
$("body").append(tempElem);
tempElem.val(text).select();
document.execCommand("copy");
tempElem.remove();
}
// ============================================================================
// Class API
// ============================================================================
return {
copyText: copyText
};
})();
Электронные таблицы перехватывают события Ctrl + C, Ctrl + V и переносят фокус на скрытый элемент управления TextArea и либо устанавливают его содержимое на желаемое новое содержимое буфера обмена для копирования, либо читают его содержимое после завершения события для вставки.
см. также Можно ли читать буфер обмена в Firefox, Safari и Chrome с помощью Javascript?
A slight improvement on the Flash solution is to detect for flash 10 using swfobject:
http://code.google.com/p/swfobject/
and then if it shows as flash 10, try loading a Shockwave object using javascript. Shockwave can read/write to the clipboard(in all versions) as well using the copyToClipboard() command in lingo.
http://www.rodsdot.com/ee/cross_browser_clipboard_copy_with_pop_over_message.asp работает с Flash 10 и всеми браузерами с поддержкой Flash.
Также ZeroClipboard был обновлен, чтобы избежать упомянутой ошибки, когда прокрутка страницы приводит к тому, что Flash-ролик больше не находится в нужном месте.
Поскольку этот метод "требует", чтобы пользователь нажал кнопку для копирования, это удобство для пользователя и ничего плохого не происходит.
Я использовал Clippy от Github для своих нужд, простая кнопка на основе Flash. Работает просто отлично, если не нужен стайлинг и устраивает вставка что вставить на стороне сервера заранее.