Я испытываю затруднения при понимании этого простого кода:
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
Кто-либо может объяснить меня, как это работает (простыми словами, потому что я - новичок)? Этот короткий код является частью этого большего кода.
Чтобы быть точнее, у меня есть следующие вопросы:
Я хотел бы подчеркнуть еще раз, что я - новичок, и использование "специальных" и "технических" слов произведет еще больше вопросов.
Заранее спасибо, если Вы решаете помочь мне!
В то время как это Как обычно, обычно создает графический интерфейс, все, что они делают, это скажет вам: «Просто сделайте это так, мы объясним, почему позже». И я думаю, что они правы, потому что детали несколько сложны и не полезны для новичка. Но в любом случае:
invokelater
запускает нить, которая будет запустить Runnable
класс позже. Класс Runnable создан специальным, как упомянуто Finnw через New Runnable {[..]}
и должен указывать Public Void Run ()
метод () Runnable
Интерфейс. В этом случае все это делает, выполняется метод CreateAndshowgui
.
Этот код делает функцию (CreateAndshowgui ()) вызывается в другом потоке. Если вы не знаете, что такое нить, лучше прочитать об этом, но в любом случае, подумайте об этом как код, который выполняется одновременно, что другой код выполняется. Другой код станет строки, которые следуют за этим вызовом (). Это очень распространено в графических приложениях, код работает для обновления графика, в то время как другой код отвечает на действия пользователя. То, что сказал, что я не удосужился прочитать документацию о invokelater () и не писал слишком много Java в моей жизни. Как сказал «Cummn» - «Вот так, как обычно создает графический интерфейс».
Вещи Weirder (для новичка) заключается в том, что параметр invokelater () определяется аннонимным способом - «в течение кода». На самом деле это хорошая вещь, так как этот класс так ничего не просто. Все остальные ответы объяснили анноним.
так: 1. Да. 2. Вы спросили, почему и попросили не получить слишком много технических деталей - но как сказано как «Юльки» - потому что в Java вы не можете пройти методы в качестве параметров, поэтому вы должны построить этот класс, и приятно построить это Отказ 3. С тому, что я итоги в моем первом абзаце, вы можете кратко читать документацию (просто поиск функции в Google), также узнайте, что узнать «поиск кода Google».
Самый короткий ответ, который я могу дать:
Runnable
- это интерфейс на Java, представляющий тип, который определяет метод run
. Любой класс, реализующий этот интерфейс, должен предоставить реализацию для run
. Runnable
s представляют задачи, которые должны выполняться другими частями Вашей системы. Нить
является хорошо известной Выполняемой
.
Когда у Вас есть код, который выглядит как new InterfaceName() { //implementation }
, то он называется анонимным классом. Смысл анонимного класса заключается в том, чтобы сделать одноразовый класс, реализующий тип интерфейса. Этот класс не имеет имени, и как таковой мы больше никогда не сможем на него ссылаться. Он используется только здесь.
Не зная многого о Swing, он выглядит как SwingUtilities.invokeLater()
принимает Runnable
и... ну, я думаю, что он ссылается на него позже (насколько позже, вероятно, это будет описано в JavaDocs). Но, причина, по которой вы бы определили здесь run
как просто вызов метода, заключается в том, что какой-то код внутри SwingUtilities
будет вызывать метод run
на этом Runnable
; Действительно, всё, что он может знать о любом методе Runnable
, это то, что он определяет метод с подписью public void run()
, потому что это единственный метод, определённый в интерфейсе Runnable
.
Ну, думаю, в конце концов, это было не слишком коротко.
Пробовали ли вы Советы по массовой загрузке данных из Советы по настройке производительности 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
. Теперь все происходит правильной нитью.
Это анонимный внутренний класс .
Вы определяете три вещи:
запустить
в этом классе В этом примере в потоке Swing должна выполняться некоторая операция ( createAndSunGUI ()
). Невозможно «перейти» в другой поток в середине вызова метода, поэтому вместо этого объект (новый созданный экземпляр) помещается в очередь. Когда поток Swing будет готов, он удалит этот объект из очереди и вызовет метод run
, который, в свою очередь, вызывает createAndSunGUI
. Теперь все происходит правильной нитью.
Самый короткий ответ:
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.