Сообщений 16    Оценка 145 [+1/-0]         Оценить  
Система Orphus

Q&A по Java

Автор: Blazkowicz
Источник: RSDN Magazine #4-2004
Опубликовано: 26.10.2004
Исправлено: 10.12.2016

Q: Где достать JDBC драйвер для…

A: Большинство драйверов можно найти здесь: http://servlet.java.sun.com/products/jdbc/drivers.

Q: Что такое обфускатор?

A: Обфускатор – это программа, которая затрудняет декомпиляцию байт-кода java-программ. Чаще всего такие программы переименовывают классы, поля и методы, так чтобы при декомпилировании их имена не несли никакой смысловой нагрузки. Такой способ защиты кода имеет положительный побочный эффект. Часто классы, поля и методы переименовываются в слова из одной-двух букв. Это позволяет сократить размер результирующего байт-кода, что часто бывает критично для J2ME-программ.

Q: Какая IDE лучше? В чем писать java-код?

A: Однозначного ответа на этот вопрос нет. Но на данный момент можно выделить три IDE, пользующиеся наибольшей популярностью:

  1. Borland JBuilder. Многие его ругают за требовательность к ресурсам. Но несмотря на это, он упорно держит лидирующую позицию. Во-первых потому, что он выглядит привычным для тех, кто ранее писал на Delphi или C++ Builder. Во-вторых, он имеет ряд удобных визардов, собственных классов и визуальных редакторов, облегчающих разработку.
  2. Intellij IDEA. Эта IDE позволяет наиболее быстро писать код. Имеет очень интеллектуальную проверку синтаксиса на лету, code completition и, наверное, самый богатый инструментарий для рефакторинга, работающего очень быстро. Однако ряд недостатков не позволяет ей выбиться в лидеры.
  3. Eclipse. Обычно его называют не IDE, а платформой для плагинов. Основная функциональность – это, конечно же, разработка Java-программ. Но огромное количество плагинов позволяет добиться практически любой функциональности в одной среде. Как и JBuilder, Eclipse имеет большое количество удобных и полезных функций. Как и IDEA – довольно широкие возможности рефакторинга. Но в отличие от них, он имеет одно неоспоримое преимущество – он бесплатен, и его исходный код доступен для всех.

Кроме названных существует огромное количество других IDE, каждая из которых имеет свою изюминку. А вероятно, наиболее полный список можно найти здесь: http://www.javaworld.com/javaworld/tools/jw-tools-ide.html

Q: Чем декомпилировать байт-код?

A: Поищите на google.com по ключевым словам: JAD, DJ Java Decompiler.

Q: Как читать/писать данные из/в MS Word, MS Excel, MS PowerPoint?

A: Если вам нужно взаимодействие с MS Excel, то считайте что вам повезло. Посмотрите на проект Jakarta POI: http://jakarta.apache.org/poi. Для тех, кто не найдет там для себя ничего полезного, есть ещё 2 выхода. Вы можете работать с документами с помощью установленного MS Office через Java COM bridge (например JACOB). Либо через установленный OpenOffice, который имеет для этого специальный API.

Q: Пытаюсь запустить программу на Java. Получаю ошибку “Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class”.

A: Запускать программу нужно не с именем файла, а с полным именем класса:

Q: Почему два объекта Calendar, содержащие одни и те же дату и время при сравнении методом equals дают значение false?

A: Убедитесь что значения миллисекунд у этих объектов равны. Их можно устанавить так:

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MILLISECOND, 0);

Q: Что такое WeakReference и SoftReference.

A: Это два рода так называемых слабых ссылок. GC может удалить объект, если на него остались только WeakReference или SoftReference. Объекты, на которые существуют только SoftReference, могут быть удалены GC, если отведенная память уже заканчивается. Объекты, на которые существуют только WeakReference, могут быть удалены при ближайшей сборке мусора. SoftReference наиболее подходят для создания различного рода кэшей. А WeakReference удобно использовать для хранения дополнительных ссылок на объекты в коллекциях. Когда объект будет уничтожен, то и ссылка на него из такой коллекции удалится автоматически. При этом нет необходимости отслеживать содержимое коллекции и самостоятельно удалять уже ненужные объекты.

Q: Есть ли в Java указатели на методы?

A: Нет. Все задачи, которые этого требуют можно решить с помощью интерфейсов либо механизма reflection.

Q: Как добавить строку в JTable.

A: Чтобы иметь возможность добавлять строки в таблицу, можно написать свою реализацию TableModel либо AbstractTableModel. Можно также воспользоваться существующим классом javax.swing.table.DefaultTableModel. Для этого нужно создавать таблицу с явным указанием модели:

DefaultTableModel myModel = new DefaultTableModel();
JTable myTable = new JTable(myModel);
Vector newRow = new Vector();
// Добавляем новую строку 
myModel.getDataVector().add(newRow); 
// Метод выравнивает добавленную строку по ширине таблицы и оповещает всех
// слушателей о том что таблица изменилась.
myModel.newRowsAdded(new TableModelEvent(myModel)); 

Q: Как поместить кнопку (CheckBox) в таблицу (Дерево).?

A: Ответы на этот и многие другие вопосы по Swing можно найти по следующим ссылкам:

Q: Как запустить другую программу из Java?

A: Воспользуйтесь методом Runtime.getRuntime().exec(“команда запуска программы”);

Q: Запускаю программу с помощью Runtime.getRuntime().exec(“команда запуска программы”), а она зависает.

A: Часто программы выводят в консоль какие-либо данные эти данные нужно вычитывать. Примеры как это делать вы можете найти здесь: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

Q: Сравниваю две одинаковые строки и получаю в результате false.

A: При сравнении с помощью оператора “==” сравниваются ссылки на объекты. Две одинаковые строки могут быть разными объектами, поэтому для сравнения воспользуйтесь методом equals().

Q: Посоветуйте, как загрузить файл на сервер.

A: Для разработки серверной части воспользуйтесь библиотекой “Commons FileUpload”: http://jakarta.apache.org/commons/fileupload. Для разработки клиентской части – “HTTP Client” http://jakarta.apache.org/commons/httpclient.

Q: Как сделать exe файл для запуска программы?

A: Итак, есть 2 способа сделать exe для Java-программы. Первый из них простой, создаётся exe-файл, который запускает вашу программу в Java-машине. Обычно этот файл ищет уже установленные JRE. Иногда для такого файла в дистрибутив программы необходимо эту JRE включать.

Второй способ – это компилирование в нативный платформозависимый код. Этот подход имеет ряд недостатков, связанных со сложностями создания таких компиляторов. Вот список ключевых слов, по которым следует их искать: GCJ, BulletTrain, Excelsior JET, JOVE, TowerJ, Visual Cafe, VisualAge for Java, FastJ.

Q: Есть ли в Java множественное наследование?

A: В Java есть множественное наследование интерфейсов и нет множественного наследования классов. Если вы портируете код со множественным наследованием, то вам на помощь могут прийти вложенные классы и аспектное программирование.

Q: При работе с графикой на сервере возникает такое исключение:

java.lang.NoClassDefFoundError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:141)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
    at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1041)
    at java.awt.image.BufferedImage.getGraphics(BufferedImage.java:1031)

A: На сервере на котором работает программа отсутствует поддержка графического окружения. Существует 2 выхода.

Запускать Java-машину в режиме headless (опция -Djava.awt.headless=true в JRE 1.4 и выше).

Предоставить системе toolkit и графическое окружение, не зависящее от поддержки ОС. Одну из таких библиотек можно найти здесь: http://www.eteks.com/pja/en


Эта статья опубликована в журнале RSDN Magazine #4-2004. Информацию о журнале можно найти здесь
    Сообщений 16    Оценка 145 [+1/-0]         Оценить