Кто-либо может объяснить меня этот метод колебания javax?

Я испытываю затруднения при понимании этого простого кода:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
   public void run() {
      createAndShowGUI();
   }
});

Кто-либо может объяснить меня, как это работает (простыми словами, потому что я - новичок)? Этот короткий код является частью этого большего кода.

Чтобы быть точнее, у меня есть следующие вопросы:

  1. "Общественность освобождает выполненный", определяют новый метод? Если имеет место, почему это определяется в рамках другого метода (см. "больший код" для ссылки)?
  2. Если "общественность, пусто выполненная", определяет новые методы, что причина состоит в том, чтобы определить метод, содержащий только одну строку кода (createAndShowGUI)?
  3. Что делает "invokeLater"? Это - на самом деле самый сложный вопрос для меня.

Я хотел бы подчеркнуть еще раз, что я - новичок, и использование "специальных" и "технических" слов произведет еще больше вопросов.

Заранее спасибо, если Вы решаете помочь мне!

7
задан 6 revs, 5 users 82% 22 October 2013 в 06:59
поделиться

5 ответов

В то время как это Как обычно, обычно создает графический интерфейс, все, что они делают, это скажет вам: «Просто сделайте это так, мы объясним, почему позже». И я думаю, что они правы, потому что детали несколько сложны и не полезны для новичка. Но в любом случае:

invokelater запускает нить, которая будет запустить Runnable класс позже. Класс Runnable создан специальным, как упомянуто Finnw через New Runnable {[..]} и должен указывать Public Void Run () метод () Runnable Интерфейс. В этом случае все это делает, выполняется метод CreateAndshowgui .

2
ответ дан 6 December 2019 в 09:19
поделиться

Этот код делает функцию (CreateAndshowgui ()) вызывается в другом потоке. Если вы не знаете, что такое нить, лучше прочитать об этом, но в любом случае, подумайте об этом как код, который выполняется одновременно, что другой код выполняется. Другой код станет строки, которые следуют за этим вызовом (). Это очень распространено в графических приложениях, код работает для обновления графика, в то время как другой код отвечает на действия пользователя. То, что сказал, что я не удосужился прочитать документацию о invokelater () и не писал слишком много Java в моей жизни. Как сказал «Cummn» - «Вот так, как обычно создает графический интерфейс».

Вещи Weirder (для новичка) заключается в том, что параметр invokelater () определяется аннонимным способом - «в течение кода». На самом деле это хорошая вещь, так как этот класс так ничего не просто. Все остальные ответы объяснили анноним.

так: 1. Да. 2. Вы спросили, почему и попросили не получить слишком много технических деталей - но как сказано как «Юльки» - потому что в Java вы не можете пройти методы в качестве параметров, поэтому вы должны построить этот класс, и приятно построить это Отказ 3. С тому, что я итоги в моем первом абзаце, вы можете кратко читать документацию (просто поиск функции в Google), также узнайте, что узнать «поиск кода Google».

1
ответ дан 6 December 2019 в 09:19
поделиться

Самый короткий ответ, который я могу дать:

Runnable - это интерфейс на Java, представляющий тип, который определяет метод run. Любой класс, реализующий этот интерфейс, должен предоставить реализацию для run. Runnables представляют задачи, которые должны выполняться другими частями Вашей системы. Нить является хорошо известной Выполняемой .

Когда у Вас есть код, который выглядит как new InterfaceName() { //implementation }, то он называется анонимным классом. Смысл анонимного класса заключается в том, чтобы сделать одноразовый класс, реализующий тип интерфейса. Этот класс не имеет имени, и как таковой мы больше никогда не сможем на него ссылаться. Он используется только здесь.

Не зная многого о Swing, он выглядит как SwingUtilities.invokeLater() принимает Runnable и... ну, я думаю, что он ссылается на него позже (насколько позже, вероятно, это будет описано в JavaDocs). Но, причина, по которой вы бы определили здесь run как просто вызов метода, заключается в том, что какой-то код внутри SwingUtilities будет вызывать метод run на этом Runnable; Действительно, всё, что он может знать о любом методе Runnable, это то, что он определяет метод с подписью public void run(), потому что это единственный метод, определённый в интерфейсе Runnable.

Ну, думаю, в конце концов, это было не слишком коротко.

11
ответ дан 6 December 2019 в 09:19
поделиться

Пробовали ли вы Советы по массовой загрузке данных из Советы по настройке производительности InnoDB (особенно первый):

  • При импорте данных в InnoDB убедитесь, что MySQL не имеет включен режим автоматической фиксации, поскольку требует сброса журнала на диск для каждого вставка. Отключение автоматической фиксации во время операция импорта, окружить ее с помощью НАБОРОВ autocommit и COMMIT операторы:

     SET autocommit = 0;
    ... Инструкции импорта SQL...
    COMMIT;
    

    Если вы используете параметр mysqldump --opt , вы получаете файлы дампа, которые быстрый импорт в таблицу InnoDB , даже без обертывания их НАБОР Автофиксация и COMMIT заявления.

  • При наличии ограничений UNIQUE для дополнительных клавиш можно ускорить работу таблицы импорт путем временного отключения проверки уникальности во время импорта сеанс:

     SET unique_checks=0;
    ... Инструкции импорта SQL...
    SET unique_checks=1;
    

    Для больших таблиц это экономит много дисковых операций ввода-вывода, поскольку InnoDB может использовать его буфер вставки для записи вторичного индексные записи в пакете. Быть уверенным что данные не содержат дубликатов ключи.

  • При наличии ограничений FOREIGN KEY в таблицах можно ускорить импорт таблиц путем включения проверка внешнего ключа для продолжительность сеанса импорта:

     SET foreign_key_checks=0;
    ... Инструкции импорта SQL...
    SET foreign_key_checks=1;
    

    Для больших таблиц это может сэкономить много дисковых операций ввода-вывода.

ИМО, вся глава стоит того, чтобы ее прочитать.

-121--1836606-

Теоретически stat сообщит вам, на каком устройстве находится файл, и должен быть какой-то способ сопоставления устройства с точкой монтирования.

Например, в Linux это должно работать:

stat -c '%m' $path
-121--1884458-

Это анонимный внутренний класс .

Вы определяете три вещи:

  • Новый класс
  • Метод, называемый запустить в этом классе
  • Новый экземпляр этого класса

В этом примере в потоке Swing должна выполняться некоторая операция ( createAndSunGUI () ). Невозможно «перейти» в другой поток в середине вызова метода, поэтому вместо этого объект (новый созданный экземпляр) помещается в очередь. Когда поток Swing будет готов, он удалит этот объект из очереди и вызовет метод run , который, в свою очередь, вызывает createAndSunGUI . Теперь все происходит правильной нитью.

6
ответ дан 6 December 2019 в 09:19
поделиться

Это анонимный внутренний класс .

Вы определяете три вещи:

  • Новый класс
  • Метод, называемый запустить в этом классе
  • Новый экземпляр этого класса

В этом примере в потоке Swing должна выполняться некоторая операция ( createAndSunGUI () ). Невозможно «перейти» в другой поток в середине вызова метода, поэтому вместо этого объект (новый созданный экземпляр) помещается в очередь. Когда поток Swing будет готов, он удалит этот объект из очереди и вызовет метод run , который, в свою очередь, вызывает createAndSunGUI . Теперь все происходит правильной нитью.

-121--3823345-

Самый короткий ответ:

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

Если имеется код, похожий на new InteriveName () {//implementation} , то он называется анонимным классом. Точкой анонимного класса является создание одноразового класса, реализующего тип интерфейса. У этого класса нет названия, и поэтому мы больше никогда не можем на него ссылаться. Он используется только здесь.

Не зная многого о Swing, он выглядит как SwingUtilities.invokeLater () принимает Runnable и... ну, я бы предположил, что он вызывает его позже (сколько позже, вероятно, описано в JavaDocs). Однако причина, по которой run здесь определяется как другой вызов метода, заключается в том, что какой-либо код в SwingUtilities будет вызывать метод run в этом Runnable ; действительно, все, что он может знать о любом Runnable , это то, что он определяет метод с сигнатурой public void run () , потому что это единственный метод, определенный в интерфейсе Runnable .

Ну, я думаю, это было не слишком коротко в конце концов.

-121--3823344-

При вызове invokeLater передается экземпляр Runnable type. Runnable - это интерфейс, который объявляет только один метод «public void run ()». То, что происходит в строке 1 вашего короткого кода, называется «Annonymous Inner Class» - вы создаете экземпляр Runnable, который используется только один раз, вы даже не называете его.

InvokeLater получит ваш Runnable, а внутри сделает что-то вроде

public static void invokeLater(Runnable r) {
    // Wait for the correct time to run this
    r.run()
}

Это означает, что invokeLater решит, когда вызывать метод run, таким образом запустив createAndStartGUI.

Поскольку в Java невозможно передать методы в качестве параметров для запуска (еще), необходимо создать этот одноразовый экземпляр Runnable.

0
ответ дан 6 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

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