Невозможно добавить какой-либо компонент (JLable, JPanel) в JFrame [дубликат]

Вместо того, чтобы бросать код на вас, есть два понятия, которые являются ключом к пониманию того, как JS обрабатывает обратные вызовы и асинхронность. (это даже слово?)

Модель цикла события и параллелизма

Есть три вещи, о которых вам нужно знать; Очередь; цикл события и стек

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

while (queue.waitForMessage()) {
   queue.processNextMessage();
}

Как только он получает сообщение для запуска чего-то, он добавляет его в очередь. Очередь - это список вещей, которые ждут выполнения (например, ваш запрос AJAX). Представьте себе это так:

 1. call foo.com/api/bar using foobarFunc
 2. Go perform an infinite loop
 ... and so on

Когда одно из этих сообщений будет исполнено, оно выталкивает сообщение из очереди и создает стек, стек - это все, что нужно выполнить JS для выполнения инструкции в сообщение. Таким образом, в нашем примере ему говорят позвонить foobarFunc

function foobarFunc (var) {
  console.log(anotherFunction(var));
}

. Так что все, что foobarFunc должно выполнить (в нашем случае anotherFunction), будет вставлено в стек. исполняемый, а затем забытый - цикл события затем переместится на следующую вещь в очереди (или прослушивает сообщения)

. Главное здесь - порядок выполнения. Это

КОГДА что-то будет запущено

Когда вы совершаете вызов с использованием AJAX для внешней стороны или выполняете любой асинхронный код (например, setTimeout), Javascript зависит от ответ, прежде чем он сможет продолжить.

Большой вопрос, когда он получит ответ? Ответ в том, что мы не знаем, поэтому цикл событий ждет, когда это сообщение скажет: «Эй, забери меня». Если JS просто ждал этого сообщения синхронно, ваше приложение замерзнет, ​​и оно сосать. Таким образом, JS продолжает выполнение следующего элемента в очереди, ожидая, пока сообщение не будет добавлено обратно в очередь.

Вот почему с асинхронной функциональностью мы используем вещи, называемые обратными вызовами. Это похоже на обещание буквально. Как и в I , обещание что-то вернуть в какой-то момент jQuery использует специальные обратные вызовы, называемые deffered.done deffered.fail и deffered.always (среди других). Вы можете увидеть их все здесь

Итак, вам нужно передать функцию, которая в какой-то момент будет выполнена с переданными ей данными.

Поскольку обратный вызов не выполняется немедленно, но в более позднее время важно передать ссылку на функцию, которую она не выполнила. поэтому

function foo(bla) {
  console.log(bla)
}

, поэтому большую часть времени (но не всегда) вы пройдете foo не foo()

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

180
задан MC Emperor 23 July 2014 в 11:25
поделиться

16 ответов

Это раздражающая ошибка Eclipse, которая, кажется, время от времени кусает. См. http://dev-answers.blogspot.de/2009/06/eclipse-build-errors-javalangobject.html для возможного решения, в противном случае попробуйте следующее:

  • Закройте проект и откройте его.
  • Очистите проект (он перестроит путь сборки, а затем переконфигурирует с помощью библиотек JDK) ИЛИ
  • Удалите и повторно импортируйте проект, и если необходимо снова выполнить вышеуказанные шаги.

Лучшее лечение - попробовать NetBeans вместо Eclipse: -)

220
ответ дан 4D - Problem Solver 27 August 2018 в 00:43
поделиться

Кажется, это ошибка Eclipse, хотя перезапуск Eclipse отлично подойдет для меня, надеюсь, что это тоже поможет кому-то еще.

2
ответ дан Arturas M 27 August 2018 в 00:43
поделиться

Это случилось со мной, когда я импортировал проект Java 1.8 из Eclipse Luna в Eclipse Kepler.

  1. Щелкните правой кнопкой мыши по проекту> Путь сборки> сконфигурировать путь сборки ...
  2. Выберите вкладку «Библиотеки», вы увидите Java 1.8 jre с ошибкой
  3. Выберите java 1.8 jre и нажмите кнопку «Удалить»
  4. Добавить библиотеку ...> JRE System Library > Далее> рабочая область по умолчанию> Готово
  5. Нажмите OK, чтобы закрыть окно свойств
  6. Перейдите в меню проекта> Очистить ...> OK

Et voilà, это сработало для меня.

7
ответ дан emisilva 27 August 2018 в 00:43
поделиться

Установили ли вы другую версию JRE после использования предыдущей версии JRE в Eclipse.

если не:

  1. Щелкните правой кнопкой мыши свой проект -> Build Путь -> Настроить путь сборки
  2. Перейдите на вкладку «Библиотеки»
  3. Добавить библиотеку -> Системная библиотека JRE -> Далее -> Рабочая область по умолчанию JRE (или вы можете выбрать Alternate JRE System) -> Finish

, если Да, чем.

  1. Щелкните правой кнопкой мыши по проекту -> Путь сборки -> Настроить путь сборки
  2. Перейдите на вкладку «Библиотеки»
  3. Удалить предыдущую версию
  4. Добавить библиотеку -> Системная библиотека JRE -> Далее -> Рабочая область по умолчанию JRE (или вы можете выбрать альтернативную JRE из своей системы) -> Готово
2
ответ дан Gaurav Varshney 27 August 2018 в 00:43
поделиться

Ни один из других ответов не работал для меня. Но сделать это:

  1. Щелкните правой кнопкой мыши проект в проводнике пакетов.
  2. Источник> Очистить ...
  3. Далее> Готово

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

4
ответ дан Jack Pettinger 27 August 2018 в 00:43
поделиться

Класс объекта является базовым классом для всех классов в java, если вам это не хватает, это означает, что у вас нет jdk-библиотек в пути сборки. Я не очень разбираюсь в Kepler, но вам нужно убедиться, что он указывает на правильный jdk для компиляции и правильный jre для запуска ваших java-приложений.

Однако я установил путь как C : \ Program Files \ Java \ jdk1.6.0_41 из eclipse Панель инструментов Kepler-> windows-> preferences-> java-> установлена ​​jre

Вы пытаетесь указать jdk вместо jre в своем предпочтения. toolbar-> windows-> preferences-> java-> установленный jre должен указывать на jre, а не jdk.

5
ответ дан Juned Ahsan 27 August 2018 в 00:43
поделиться

У меня была такая же проблема в окнах eclipse, что я не мог добавить файлы зависимых .class из JNI. Чтобы решить эту проблему, я портировал весь код в среду IDE NetBeans.

Невозможно добавить все файлы классов из папки JNI / JNA в Eclipse (JAVA, Windows 7)

1
ответ дан Jyo the Whiff 27 August 2018 в 00:43
поделиться

Решена моя проблема:

1) Установите jdk в каталог без пробелов:

C:/Java

Вместо

C:/Program Files/Java

является известной проблемой в Windows. Я также исправил JAVA_HOME

2) Я java 7 и java 8 на своем ноутбуке. Поэтому я определил jvm с помощью eclipse.ini. Это не обязательный шаг, если у вас нет записи -vm в вашем eclipse.ini. Я обновил:

C:/Java/jdk1.7.0_79/jre/bin/javaw.exe

Вместо:

C:/Java/jdk1.7.0_79/bin/javaw.exe

Удачи вам

2
ответ дан KerenSi 27 August 2018 в 00:43
поделиться

Следующие шаги могут помочь:

  1. Щелкните правой кнопкой мыши по проекту »Свойства» Путь сборки Java
  2. Выберите вкладку «Библиотеки»
  3. Найдите JRE Системную библиотеку и удалить ее
  4. Нажмите «Добавить библиотеку ...» справа »Добавить Системную библиотеку JRE (рабочая область по умолчанию JRE)
191
ответ дан MC Emperor 27 August 2018 в 00:43
поделиться

Отсутствие очистки, закрытие / повторное открытие проекта IDE, удаление / добавление JRE в путь сборки, сработали для меня.

Единственное решение, которое я нашел, это удалить проект из Eclipse (не из диск), удалите файлы Eclipse проекта с диска и снова импортируйте в Eclipse. Это сработало.

Это легко сделать, если вы используете Maven:

mvn clean eclipse:clean eclipse:eclipse
2
ответ дан Nicolas Raoul 27 August 2018 в 00:43
поделиться

Слушайте меня после того, как я установил некоторые обновления в eclipse, но потом забыл перезапустить. Поэтому возможно перезапуск eclipse может помочь.

0
ответ дан NotX 27 August 2018 в 00:43
поделиться

Щелкните правой кнопкой мыши по проекту -> Показать в навигаторе. В окне навигации вы можете увидеть файл .classpath, удалить этот файл и создать проект. Это сработало для меня. PS. Если вы интегрировали проект eclipse с каким-то контролем версий, например perfoce / svn, то отключение проекта до удаления .classpath будет полезно.

3
ответ дан Sankalp 27 August 2018 в 00:43
поделиться

Еще одна проблема может заключаться в том, что Android Project Build Target не установлен.

  1. Щелкните правой кнопкой мыши проект
  2. Выберите «Свойства»
  3. Нажмите «Android»
  4. Отметьте соответствующую цель сборки проекта
  5. Применить | OK
3
ответ дан satyrFrost 27 August 2018 в 00:43
поделиться

Пока мы работаем с версиями tomcat 6 и jdk 1.8, некоторые функции не будут работать, и эта ошибка вы получаете. вам нужно изменить версию jdk на стабильную версию (предпочтительный jdk 1.6 или jdk 1.8_65) в eclipse для устранения этой ошибки.

в eclipse шаг 1: свойства -> путь сборки Java -> jre системная библиотека ( удалить) Шаг 2: добавить -> jre system library -> alternate jre -> installed jre -> add -> Standard VM -> (in jre home, place jdk path) -> finish

теперь очистить и проверьте проект

1
ответ дан swetha naraharisetty 27 August 2018 в 00:43
поделиться

Я столкнулся с этой проблемой с приложением play-java на eclipse после добавления контроллера, я удалил и переустановил JRE по пути сборки, а затем удалил и импортировал мой проект, который решил эту проблему автоматически. Спасибо гироскопу.

2
ответ дан user989383 27 August 2018 в 00:43
поделиться

Вот как я это решил: В Java-ADT: Windows - Предпочтение - Java - Установленные JRE Просто добавьте еще одну JRE, указав на папку «jre» в вашей папке JDK. (jre входит в jdk). Убедитесь, что вы выбрали новый jre.

10
ответ дан xyz 27 August 2018 в 00:43
поделиться
Другие вопросы по тегам:

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