|
|
|
Покритикуйте код. Заход 2
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczГрубая ошибка: Код: java 1. 2. 3. 4. исправил Blazkowicz saveImages/savePages - очень сильно смущает фривольное обращение с URI, который, вероятно, должен быть всегда валидным для этой задачи. это ссылки на картинки, страницы которые я выкачал. на этом этапе они всегда валидные BlazkowiczgetTreeCellRendererComponent - должен очень быстро по состоянию модели создать отображение. А тут запускается какая-то сложная логика с IO, ловятся исключения. А потом пишут мол Swing тормозной. я понимаю что та должно быть как можно меньше проверок. Но убрать я их не могу. Если при отображении файла возникла ошибка нужно перепроверить список файлов в директории BlazkowiczDownload implements Runnable - запускается в фоновом потоке и из него обновляет GUI. Это приведёт к рандоммным исключениям с UI уровня Swing. Используйте SwingWorker или SecondaryLoop. я думал SwingUtilities.invokeLater решит эту проблему BlazkowiczА это что за финт ушами? Код: java 1. 2. )))))) да я согласен шняга )) сча придумаю чето другое Blazkowicz @Override public String toString() { return login.trim(); } Лучше полностью выводить состояние объекта. Удобно для отладки. Не используйте toString() для логики. Эту штуку я переопределил что бы JComboBox jComboBoxLogin отображался только логин. а не весь объект BlazkowiczВам нужно научиться отделять модель от представления. Весь ваш код должен уметь работать без UI вообще. UI нужен лишь для того чтобы отображать состояние вашей модели. Хорошим упражнением может быть создание альтернативного UI для вашей логики. Например web или JavaFX. та это я и сам понимаю. Теоретически, а вот когда пишешь то чето так не получается. Как это сделать реально я сейчас не сосем понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 18:51 |
|
||
|
Покритикуйте код. Заход 2
|
|||
|---|---|---|---|
|
#18+
GaraZBlazkowiczГрубая ошибка: исправил Оно не в одном месте, если что. GaraZэто ссылки на картинки, страницы которые я выкачал. на этом этапе они всегда валидные Ссылки без "расширений" в имени файлов тоже работают? GaraZя понимаю что та должно быть как можно меньше проверок. Но убрать я их не могу. Если при отображении файла возникла ошибка нужно перепроверить список файлов в директории Поэтому должна быть заведомо валиднай модель, которая всегда отображается. "Перепроверки" должны быть на этапе изменения модели. GaraZя думал SwingUtilities.invokeLater решит эту проблему Решит. Но там куча мест где он не используется. JOptionPane, .setText() и пр. Если каждый отдельно оборачивать в invokeLater, то код станет достаточно уродливым. SwingWorker отчасти решает эту проблему. Тут код выполняющийся в фоне, тут обрабатываем результат, а тут ошибки. Лучше полностью выводить состояние объекта. Удобно для отладки. Не используйте toString() для логики. [/quot] Эту штуку я переопределил что бы JComboBox jComboBoxLogin отображался только логин. а не весь объект BlazkowiczВам нужно научиться отделять модель от представления. Весь ваш код должен уметь работать без UI вообще. UI нужен лишь для того чтобы отображать состояние вашей модели. Хорошим упражнением может быть создание альтернативного UI для вашей логики. Например web или JavaFX. GaraZта это я и сам понимаю. Теоретически, а вот когда пишешь то чето так не получается. Как это сделать реально я сейчас не сосем понимаю Выходит что класс, которы отвечает за работу с XML, теперь зависит от того как устроен UI. Связь не явная. Ломается очень легко, в случае каких рефакторингов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 18:58 |
|
||
|
Покритикуйте код. Заход 2
|
|||
|---|---|---|---|
|
#18+
BlazkowiczGaraZпропущено... исправил Оно не в одном месте, если что. GaraZэто ссылки на картинки, страницы которые я выкачал. на этом этапе они всегда валидные Ссылки без "расширений" в имени файлов тоже работают? Ссылки без расширений не выкачиваются BlazkowiczGaraZя понимаю что та должно быть как можно меньше проверок. Но убрать я их не могу. Если при отображении файла возникла ошибка нужно перепроверить список файлов в директории Поэтому должна быть заведомо валиднай модель, которая всегда отображается. "Перепроверки" должны быть на этапе изменения модели. Я не очень понимаю как здесь обеспечить заведомо валидную модель. Загружать все файлы в память или блокировать все файлы в папке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 15:40 |
|
||
|
Покритикуйте код. Заход 2
|
|||
|---|---|---|---|
|
#18+
GaraZСсылки без расширений не выкачиваются Да. Но выходит что один класс, предполагает что другой класс предоставит ему всегда валидную информацию. Если вы вдруг захотите эту логику поменять. Ни HTTP, ни даже файловая система не запрещает картинки без расширений, то сделав изменение в одном месте, вы можете упустить надобность изменения в другом. То есть между кодом одного класса и кодом другого класса существует неявная зависимость. О которой надо знать. BlazkowiczЯ не очень понимаю как здесь обеспечить заведомо валидную модель. Загружать все файлы в память или блокировать все файлы в папке? Я не разбирался что эта хрень делает. Поэтому не вникал особо. Я просто говорю о недостатках в коде. Отображение не должно быть на столько сложным чтобы выкидывать исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 15:47 |
|
||
|
Покритикуйте код. Заход 2
|
|||
|---|---|---|---|
|
#18+
GaraZЯ не очень понимаю как здесь обеспечить заведомо валидную модель. Загружать все файлы в память или блокировать все файлы в папке? Скорее всего именно стоит загружать в память. Но тут много тонких моментов связаных с количеством этих файлов, с их размером и т.п. Но реально, cellRenderer будет вызываться на каждый пук. При этом картинка снова и снова будет загружаться из файловой системы и декодироваться. Откройте десяток-другой нод с разными файлами и сделайте resize окна и дерева. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 15:53 |
|
||
|
Покритикуйте код. Заход 2
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСкорее всего именно стоит загружать в память. Но тут много тонких моментов связаных с количеством этих файлов, с их размером и т.п. Но реально, cellRenderer будет вызываться на каждый пук. При этом картинка снова и снова будет загружаться из файловой системы и декодироваться. Откройте десяток-другой нод с разными файлами и сделайте resize окна и дерева. А ещё, картинки ведь ресайзятся под размер ячейки каждый раз. Это тоже отнимает дополнительные ресурсы. С другой стороны держать в памяти все изображения, если они крупные, будет накладно по памяти. Поэтому имеет смысл добавить какой-то memory sensitive кэш, для того чтобы хранить в нем thumbnail нужного размера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 15:57 |
|
||
|
Покритикуйте код. Заход 2
|
|||
|---|---|---|---|
|
#18+
GaraZBlazkowiczGregorianCalendar calendar = new GregorianCalendar(); лучше Calendar calendar = Calendar.newInstance(); Чем лучше? Лучше тем, что Calendar.getInstance() вернёт нужный, правильно инициализированный объект календаря в зависимости от текущих региональных настроек... Но вместе с тем никто не запрещает сделать и вот так Calendar calendar = GregorianCalendar.getInstance() или вот так GregorianCalendar calendar = GregorianCalendar.getInstance(), в случае если Вы не собираетесь локализовать приложение для работы в разных временнЫх исчислениях и будете работать только с григорианским календарём... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 20:58 |
|
||
|
Покритикуйте код. Заход 2
|
|||
|---|---|---|---|
|
#18+
Alex Kuznetsovпропущено... ...или вот так GregorianCalendar calendar = GregorianCalendar.getInstance()...Сорри, здесь я налажевал, потому как если что то придётся делать явное приведение типа, т.е. GregorianCalendar calendar = (GregorianCalendar)GregorianCalendar.getInstance(); Что на самом деле странно, могли бы уж и переопределить возвращаемый результат... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 08:40 |
|
||
|
Покритикуйте код. Заход 2
|
|||
|---|---|---|---|
|
#18+
Alex KuznetsovGaraZпропущено... Чем лучше? Лучше тем, что Calendar.getInstance() вернёт нужный, правильно инициализированный объект календаря в зависимости от текущих региональных настроек... Но вместе с тем никто не запрещает сделать и вот так Calendar calendar = GregorianCalendar.getInstance() или вот так GregorianCalendar calendar = GregorianCalendar.getInstance(), в случае если Вы не собираетесь локализовать приложение для работы в разных временнЫх исчислениях и будете работать только с григорианским календарём... уже отказался от данной реализации в пользу Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 11:39 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2127739]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
11ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 528ms |

| 0 / 0 |
