Java приложения, Java-программы, Java технологии и секреты, J2SE, J2EE, проект Jakarta
May
Продолжаю серию статей о нововведениях в Java (начиная с версии 1.5). На этот раз разговор пойдет об аннотациях (annotation type).
Аннотации представляют собой некие метаданные, которые могут добавлятся в исходный код программы и семантически не влияют на нее, но могут использоваться в процессе анализа кода, компиляции и даже во время выполнения.
Вот основные варианты использования аннтоаций:
(more…)
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…)
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…)
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 фон для нашего окошка.
- Располагаем все это дело так, чтобы реальное изображение экрана и фон окна совпадали - соответственно, создастся иллюзия прозрачного окна.
June
Java Головоломки (Java Puzzles)
Posted in: Java technologies, J2SE, Ваш досуг. Полезные советы | 3 Comments
Всем привет.
Для разнообразия посмотрим на язык программирования Java с другой стороны.
Ниже вы найдете одну очень интересную ссылку. К моему глубочайшему сожалению, я обнаружил ее совсем недавно.
Два серьезных дядьки - Джошуа Блок (Joshua Bloch) и Нил Гафтер (Neal Gafter) в совсем несерьезном стиле предлагают вашему вниманию восемь интереснейших головоломок.
(more…)
April
Исключительные ситуации в Java (exceptions and errors)
Posted in: Java technologies, J2SE | 8 Comments
Эта статья посвящается очень важному вопросу программирования - исключительным ситуациям и ошибкам (exceptions and errors).
В языке Java исключения (Exceptions) и ошибки (Errors) являются объектами. Когда метод вызывает (бросает - throws) исключительную ситуацию, он на самом деле работает с объектом. Но такое происходит не с любыми объектами, а только с теми, которые наследуются от Throwable.
Упрощенную диаграмму классов ошибок и исключительний вы можете увидеть на следующем рисунке:
(more…)
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…)
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)
October
Как говорится: случайность - частный случай закономерности. Поэтому наверняка вы используете случайные числа в некоторых своих разработках.
В Java есть класс для работы со случайными (точнее псевдослучайными) числами - java.util.Random. Тем не менее, некоторые люди пользуются им не совсем так, как надо.
Пример:
(more…)
October
Игра “Меморина” (Java Swing GUI Game) и проблема с ImageIcon
Posted in: Java GUI, Swing, AWT, SWT, Java technologies, J2SE | 5 Comments
Ну прямо гейм-девелопер какой-то.
Попросили меня написать маленькую игрушечку с использованием графической библиотеки Java Swing. Игра всем знакома и называется “Меморина”.
Думаю, заказчик не будет сильно зол за то, что я выложу игру на всеобщее обозрение…
Еще столкнулся с такой проблемой: при загрузке картинок из jar-файла возникает исключительная ситуация ImageFormatException, хотя при запуске из IDE все проходит без ошибок.
(more…)