Java приложения, Java-программы, Java технологии и секреты, J2SE, J2EE, проект Jakarta




31
May

Аннотации в Java (java annotation types)

Posted in: Java technologies, J2SE | 8 Comments

Продолжаю серию статей о нововведениях в Java (начиная с версии 1.5). На этот раз разговор пойдет об аннотациях (annotation type).

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

Вот основные варианты использования аннтоаций:
(more…)

4
April

Чтение и запись CSV файлов в Java (comma separated values file format)

Posted in: Java open-source проекты, Java technologies, J2SE, Полезные программы | 6 Comments

Решил сделать свой вклад в мировое open-source сообщество. Как вы уже догадались из названия статьи, на этот раз речь пойдет о формате CSV.

Итак, проблема заключалась в том, что генерация отчетов в формате Excel через библиотеку POI кушала много оперативной памяти и процессорного времени.

Сам по себе Excel, наверное, один из немногих хороших продуктов компании Microsoft, но вот формат файлов оставляет желать лучшего. Короче говоря, при генерации документа необходимо полностью держать его в памяти.

Выходом из ситуации является использование формата CSV (comma-separated values file format), который к счастью тоже читается с помощью Excel.
(more…)

27
January

Перечисляемые типы в Java (enum types, enumerations)

Posted in: Java technologies, J2SE | 11 Comments

По просьбам читателей начну цикл статей, посвященный нововведениям в Java начиная с версии 1.5. Думаю, статьи этой тематики будут актуальны для многих, так как сам только недавно начал переходить на 1.6 (на работе в проекте до сих пор используется версия jdk 1.4).
В этой статье я хочу рассказать о перечислениях (enumeration, enum). Сначала я покажу, как реализовывались перечисления в ранних версиях java.

Итак, перечисление (enum) - это тип, значения которого ограничены конечным набором констант.
Самым простым способом реализовать некоторый набор значений есть следующий класс:
(more…)

21
June

Прозрачные окна в Java Swing (transparent windows)

Posted in: Java GUI, Swing, AWT, SWT, Java technologies, J2SE | 5 Comments

Библиотека Java Swing не предоставляет возможности создания прозрачных (transparent) окон без использования native кода.
Наткнулся на одну интересную статью. В ней рассказывается, как можно без этого самого native кода сделать “прозрачные” окошки в Java Swing. Реализуется это при помощи хитрого хака:

  • Делаем скриншот перед прорисовкой окна.
  • Используем этот screenshot как background фон для нашего окошка.
  • Располагаем все это дело так, чтобы реальное изображение экрана и фон окна совпадали - соответственно, создастся иллюзия прозрачного окна.

(more…)

6
June

Java Головоломки (Java Puzzles)

Posted in: Java technologies, J2SE, Ваш досуг. Полезные советы | 3 Comments

Всем привет.
Для разнообразия посмотрим на язык программирования Java с другой стороны.
Ниже вы найдете одну очень интересную ссылку. К моему глубочайшему сожалению, я обнаружил ее совсем недавно.
Два серьезных дядьки - Джошуа Блок (Joshua Bloch) и Нил Гафтер (Neal Gafter) в совсем несерьезном стиле предлагают вашему вниманию восемь интереснейших головоломок.
(more…)

11
April

Исключительные ситуации в Java (exceptions and errors)

Posted in: Java technologies, J2SE | 8 Comments

Эта статья посвящается очень важному вопросу программирования - исключительным ситуациям и ошибкам (exceptions and errors).
В языке Java исключения (Exceptions) и ошибки (Errors) являются объектами. Когда метод вызывает (бросает - throws) исключительную ситуацию, он на самом деле работает с объектом. Но такое происходит не с любыми объектами, а только с теми, которые наследуются от Throwable.
Упрощенную диаграмму классов ошибок и исключительний вы можете увидеть на следующем рисунке:
(more…)

10
March

Производительность при работе с XPath в Java (performance issues)

Posted in: Технологии XML, XPath, Java technologies, J2SE | 1 Comment

Пакет javax.xml.xpath (Java 1.4) предоставляет пользователю независимый API для вычисления XPath выражений.
По умолчанию используется Sun’овская реализация всех классов из этого пакета. Работая с этой имплементацией была обнаружена одна интересная вещь.
По мере углубления в DOM-дерево (Document Object Model), скорость вычисления одних и тех же XPath выражений постепенно падает.
В этой статье я хочу продемонстрировать описанную проблему, а также предложить альтернативный способ работы с сильноветвящимся DOM-деревом при вычислении XPath.
(more…)

1
December

Проблема с rowset.jar (NullPointerException)

Posted in: Базы данных, SQL, Oracle, Java technologies, J2SE | 2 Comments

Библиотека rowset.jar предоставляет набор имплементаций для таких интерфейсов, как CachedRowSet, FilteredRowSet, JoinRowSet и т.д, а также другие необходимые классы для работы с ними.
Чаще всего программистам приходится иметь дело именно с com.sun.rowset.CachedRowSetImpl. Этот класс позволяет кэшировать данные из data source (так сказать, работать в режиме off-line).
В этой статье я хочу рассказать о проблеме, которая возникла у меня при работе с библиотекой.
А именно, при попытке создать объект CachedRowSetImpl валился следующий Exception:

java.lang.NullPointerException
 at java.io.Reader.<init>(Reader.java:61)
 at java.io.InputStreamReader.<init>(InputStreamReader.java:80)
 at java.util.Properties.load(Properties.java:266)
 at java.util.PropertyResourceBundle .<init>(PropertyResourceBundle.java:96)
 at com.sun.rowset.JdbcRowSetResourceBundle.<init>(Unknown Source)
 at com.sun.rowset.JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(Unknown Source)
 at com.sun.rowset.CachedRowSetImpl .<init>(Unknown Source)
 at TestRowSet.main(TestRowSet.java:14)

(more…)

14
October

Генератор случайных чисел (java.util.Random)

Posted in: Java technologies, J2SE | 3 Comments

Как говорится: случайность - частный случай закономерности. Поэтому наверняка вы используете случайные числа в некоторых своих разработках.
В Java есть класс для работы со случайными (точнее псевдослучайными) числами - java.util.Random. Тем не менее, некоторые люди пользуются им не совсем так, как надо.
Пример:
(more…)

6
October

Игра “Меморина” (Java Swing GUI Game) и проблема с ImageIcon

Posted in: Java GUI, Swing, AWT, SWT, Java technologies, J2SE | 5 Comments

Ну прямо гейм-девелопер какой-то.
Попросили меня написать маленькую игрушечку с использованием графической библиотеки Java Swing. Игра всем знакома и называется “Меморина”.
Думаю, заказчик не будет сильно зол за то, что я выложу игру на всеобщее обозрение…
Еще столкнулся с такой проблемой: при загрузке картинок из jar-файла возникает исключительная ситуация ImageFormatException, хотя при запуске из IDE все проходит без ошибок.
(more…)