powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Покритикуйте код. Заход 2
10 сообщений из 60, страница 3 из 3
Покритикуйте код. Заход 2
    #38539588
GaraZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

BlazkowiczГрубая ошибка:
Код: java
1.
2.
3.
4.
catch(NoSuchFileException e) {
            filesList.remove(file);
            throw new NoSuchFileException(file.getName().concat(" not found. "));
}




исправил

Blazkowicz saveImages/savePages - очень сильно смущает фривольное обращение с URI, который, вероятно, должен быть всегда валидным для этой задачи.

это ссылки на картинки, страницы которые я выкачал. на этом этапе они всегда валидные

BlazkowiczgetTreeCellRendererComponent - должен очень быстро по состоянию модели создать отображение. А тут запускается какая-то сложная логика с IO, ловятся исключения. А потом пишут мол Swing тормозной.

я понимаю что та должно быть как можно меньше проверок. Но убрать я их не могу. Если при отображении файла возникла ошибка нужно перепроверить список файлов в директории
BlazkowiczDownload implements Runnable - запускается в фоновом потоке и из него обновляет GUI. Это приведёт к рандоммным исключениям с UI уровня Swing. Используйте SwingWorker или SecondaryLoop.

я думал SwingUtilities.invokeLater решит эту проблему

BlazkowiczА это что за финт ушами?
Код: java
1.
2.
class Download implements Runnable {
        private Runnable runnable;



))))))
да я согласен шняга )) сча придумаю чето другое

Blazkowicz @Override
public String toString() {
return login.trim();
}


Лучше полностью выводить состояние объекта. Удобно для отладки. Не используйте toString() для логики.

Эту штуку я переопределил что бы JComboBox jComboBoxLogin отображался только логин. а не весь объект

BlazkowiczВам нужно научиться отделять модель от представления. Весь ваш код должен уметь работать без UI вообще.
UI нужен лишь для того чтобы отображать состояние вашей модели.
Хорошим упражнением может быть создание альтернативного UI для вашей логики. Например web или JavaFX.


та это я и сам понимаю. Теоретически, а вот когда пишешь то чето так не получается. Как это сделать реально я сейчас не сосем понимаю
...
Рейтинг: 0 / 0
Покритикуйте код. Заход 2
    #38539594
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaraZBlazkowiczГрубая ошибка:

исправил

Оно не в одном месте, если что.

GaraZэто ссылки на картинки, страницы которые я выкачал. на этом этапе они всегда валидные

Ссылки без "расширений" в имени файлов тоже работают?

GaraZя понимаю что та должно быть как можно меньше проверок. Но убрать я их не могу. Если при отображении файла возникла ошибка нужно перепроверить список файлов в директории
Поэтому должна быть заведомо валиднай модель, которая всегда отображается. "Перепроверки" должны быть на этапе изменения модели.

GaraZя думал SwingUtilities.invokeLater решит эту проблему

Решит. Но там куча мест где он не используется. JOptionPane, .setText() и пр. Если каждый отдельно оборачивать в invokeLater, то код станет достаточно уродливым. SwingWorker отчасти решает эту проблему. Тут код выполняющийся в фоне, тут обрабатываем результат, а тут ошибки.


Лучше полностью выводить состояние объекта. Удобно для отладки. Не используйте toString() для логики.
[/quot]
Эту штуку я переопределил что бы JComboBox jComboBoxLogin отображался только логин. а не весь объект

BlazkowiczВам нужно научиться отделять модель от представления. Весь ваш код должен уметь работать без UI вообще.
UI нужен лишь для того чтобы отображать состояние вашей модели.
Хорошим упражнением может быть создание альтернативного UI для вашей логики. Например web или JavaFX.


GaraZта это я и сам понимаю. Теоретически, а вот когда пишешь то чето так не получается. Как это сделать реально я сейчас не сосем понимаю
Выходит что класс, которы отвечает за работу с XML, теперь зависит от того как устроен UI. Связь не явная. Ломается очень легко, в случае каких рефакторингов.
...
Рейтинг: 0 / 0
Покритикуйте код. Заход 2
    #38540679
GaraZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczGaraZпропущено...

исправил

Оно не в одном месте, если что.

GaraZэто ссылки на картинки, страницы которые я выкачал. на этом этапе они всегда валидные

Ссылки без "расширений" в имени файлов тоже работают?

Ссылки без расширений не выкачиваются

BlazkowiczGaraZя понимаю что та должно быть как можно меньше проверок. Но убрать я их не могу. Если при отображении файла возникла ошибка нужно перепроверить список файлов в директории
Поэтому должна быть заведомо валиднай модель, которая всегда отображается. "Перепроверки" должны быть на этапе изменения модели.

Я не очень понимаю как здесь обеспечить заведомо валидную модель. Загружать все файлы в память или блокировать все файлы в папке?
...
Рейтинг: 0 / 0
Покритикуйте код. Заход 2
    #38540696
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaraZСсылки без расширений не выкачиваются

Да. Но выходит что один класс, предполагает что другой класс предоставит ему всегда валидную информацию. Если вы вдруг захотите эту логику поменять. Ни HTTP, ни даже файловая система не запрещает картинки без расширений, то сделав изменение в одном месте, вы можете упустить надобность изменения в другом. То есть между кодом одного класса и кодом другого класса существует неявная зависимость. О которой надо знать.

BlazkowiczЯ не очень понимаю как здесь обеспечить заведомо валидную модель. Загружать все файлы в память или блокировать все файлы в папке?
Я не разбирался что эта хрень делает. Поэтому не вникал особо. Я просто говорю о недостатках в коде. Отображение не должно быть на столько сложным чтобы выкидывать исключение.
...
Рейтинг: 0 / 0
Покритикуйте код. Заход 2
    #38540712
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaraZЯ не очень понимаю как здесь обеспечить заведомо валидную модель. Загружать все файлы в память или блокировать все файлы в папке?
Скорее всего именно стоит загружать в память. Но тут много тонких моментов связаных с количеством этих файлов, с их размером и т.п. Но реально, cellRenderer будет вызываться на каждый пук. При этом картинка снова и снова будет загружаться из файловой системы и декодироваться. Откройте десяток-другой нод с разными файлами и сделайте resize окна и дерева.
...
Рейтинг: 0 / 0
Покритикуйте код. Заход 2
    #38540718
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСкорее всего именно стоит загружать в память. Но тут много тонких моментов связаных с количеством этих файлов, с их размером и т.п. Но реально, cellRenderer будет вызываться на каждый пук. При этом картинка снова и снова будет загружаться из файловой системы и декодироваться. Откройте десяток-другой нод с разными файлами и сделайте resize окна и дерева.
А ещё, картинки ведь ресайзятся под размер ячейки каждый раз. Это тоже отнимает дополнительные ресурсы.
С другой стороны держать в памяти все изображения, если они крупные, будет накладно по памяти. Поэтому имеет смысл добавить какой-то memory sensitive кэш, для того чтобы хранить в нем thumbnail нужного размера.
...
Рейтинг: 0 / 0
Покритикуйте код. Заход 2
    #38541252
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaraZBlazkowiczGregorianCalendar calendar = new GregorianCalendar(); лучше Calendar calendar = Calendar.newInstance();

Чем лучше?
Лучше тем, что Calendar.getInstance() вернёт нужный, правильно инициализированный объект календаря в зависимости от текущих региональных настроек...
Но вместе с тем никто не запрещает сделать и вот так Calendar calendar = GregorianCalendar.getInstance() или вот так GregorianCalendar calendar = GregorianCalendar.getInstance(), в случае если Вы не собираетесь локализовать приложение для работы в разных временнЫх исчислениях и будете работать только с григорианским календарём...
...
Рейтинг: 0 / 0
Покритикуйте код. Заход 2
    #38541493
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsovпропущено...
...или вот так GregorianCalendar calendar = GregorianCalendar.getInstance()...Сорри, здесь я налажевал, потому как если что то придётся делать явное приведение типа, т.е. GregorianCalendar calendar = (GregorianCalendar)GregorianCalendar.getInstance(); Что на самом деле странно, могли бы уж и переопределить возвращаемый результат...
...
Рейтинг: 0 / 0
Покритикуйте код. Заход 2
    #38541770
GaraZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex KuznetsovGaraZпропущено...

Чем лучше?
Лучше тем, что Calendar.getInstance() вернёт нужный, правильно инициализированный объект календаря в зависимости от текущих региональных настроек...
Но вместе с тем никто не запрещает сделать и вот так Calendar calendar = GregorianCalendar.getInstance() или вот так GregorianCalendar calendar = GregorianCalendar.getInstance(), в случае если Вы не собираетесь локализовать приложение для работы в разных временнЫх исчислениях и будете работать только с григорианским календарём...

уже отказался от данной реализации в пользу

Код: java
1.
2.
        DateFormat df = new SimpleDateFormat("yyyyMMdd");
        String dirNow = df.format(System.currentTimeMillis());
...
Рейтинг: 0 / 0
Покритикуйте код. Заход 2
    #38542121
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaraZ,

Это в принципе правильно, но можно было бы и проще сделать с одним лишь String.format
...
Рейтинг: 0 / 0
10 сообщений из 60, страница 3 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Покритикуйте код. Заход 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]