Archive

Posts Tagged ‘Java’

Внезапное закрытие Java-приложения: как избежать?

Июнь 26th, 2011

Источник

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

Очень часто бывает нужно выполнять какие-то операции по завершению приложения. Например, когда вы пишите текстовый редактор с использованием Swing, и это ваше приложение создает временный файл при начале своей работы. Временный файл должен быть удален, как только пользователь закроет ваше приложение. Если же вы пишите приложение, состоящее из множества сервлетов, встраиваемых в сервлет-контейнер (например, Tomcat или Jetty), то вы должны вызывать метод destroy для каждого из загруженных вами сервлетов до того, как завершится работа приложения.

Во многих случаях, вы надеетесь на то, что пользователь закроет приложение “нормальным” для вас способом. Например, в первом случае вы можете предоставить ему компонент JButton, после клика на который выполняются необходимые завершающие операции и осуществляется непосредственно выход из приложения. Как альтернативный вариант вы можете повесить обработчик события окна, который бы обрабатывал событие windowClosing. Tomcat же использует специальный batch-файл, который может быть выполнен при правильном завершении работы с приложением. Однако, хорошо известно, что пользователи далеко не так часто корректно завершают работу с приложениями. Они могут делать с приложениями все, что пожелают. Помимо этого пользователь может просто-напросто закрыть консоль или завершить свой сеанс работы с операционной системой, оставив при этом ваше приложение незакрытым.

Read more...

, , , , , , ,

Избегайте switch! Используйте enum!

Май 26th, 2011

Источник

Недавно мне пришлось проводить рефакторинг некоторого кода и я заметил, что большая часть кода состояла из структур switch-case или if-else каскадов. И тогда я вспомнил статью Дэниэла и решил воспользоваться его четырьмя правилами для того чтобы избавиться от этого безобразия. Допустим у нас есть конструкции вида:

switch (value) {
case SOME_CONSTANT:
//do something
break;
case SOME_OTHER_CONSTANT:
//do something else
break;
...
default:
//do something totally different
break;
}

или эквивалентные if-else каскады.

Read more...

, , , ,

Какие бывают типы OutOfMemoryError или из каких частей состоит память java процесса

Апрель 24th, 2011

Источник

Если вы словили OutOfMemoryError, то это вовсе не значит, что ваше приложение создает много объектов, которые не могут почиститься сборщиком мусора и заполняют всю память, выделенную вами с помощью параметра -Xmx. Я, как минимум, могу придумать два других случая, когда вы можете увидеть эту ошибку. Дело в том, что память java процесса не ограничивается областью -Xmx, где ваше приложение программно создает объекты.

Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места.

Read more...

, , ,

Infinite scroll : Loading content while scrolling, using Java and JQuery

Март 6th, 2011

Source

Have you seen the infinite scrolling of content in some web pages? For example, in DZone.com when you scroll the page to the bottom, new links will be loaded automatically and it’ll give you the illusion that the page scrolls infinitely. Another good example is that Bing’s Image Search.

The technique is not hard to implement. With the use of a single servlet and JSP, we can implement a basic functionality with infinite scroll. Before dive into code details, have a look at this demo to get a feel of it: Infinite Scroll Demo

To implement this, we need a servlet which will serve the dynamic content and a JSP file which will have the UI and act as a client to receive the content. Below are the code for these two files. I’m leaving other common stuffs (like web.xml entry etc) to you.

Read more...

, , , , , , ,

Виды ссылок на объекты в Java

Февраль 10th, 2011

Источник

В данной статье рассматривается использование классов из стандартного пакета  java.lang.ref , таких как SoftReference,  WeakReferencePhantomReference .

Рассмотрим пример когда эти классы могут понадобиться.

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

Здесь можно пойти разными путями, рассмотрим некоторые:

1. можно следить за тем, когда объект перестает использоваться на клиенте и затем удалять его из коллекции. Однако, это решение требует многих изменений в логике работы клиента, и будет идеально чтобы другие классы работали с этими объектами прозрачно.

2. Использовать механизм "слабых ссылок" в Java.

Read more...

, , , , , ,