3. Создание простого приложения в Real-Time Java
Теперь научимся запускать в среде JamaicaVM простейшую программу. Эта программа будет обрабатывать POSIX-сигналы SIGUSR1 и SIGUSR2. При получении сигнала SIGUSR1 программа будет выводит на консоль строку "I'm a POSIX signal handler!". При получении сигнала SIGUSR2 программа будет выводить на консоль строку "Good by!" и завершаться с кодом возврата 0.
Для выполнения этого задания сначала создадим новый проект Java — выберем элемент меню File | New | Project. Откроется окно помощника создания проектов. Введем имя проекта (try_rtjava) и нажмем кнопку Finish.
Обратите внимание, что в разделе JRE с помощью выбора переключателя Use a project specific JRE можно выбрать среду исполнения Java для данного проекта из числа установленных JRE.
Итак, после нажатия кнопки Finish в представлении Package Explorer появится папка "try_rtjava" — это и есть наш проект.
Создадим новый класс (File | New | Class). В открывшемся окне (рис. 2.3) укажем имя класса (HelloRTJava) и в группе флажков Which method stubs would you like to create? (Заглушки каких методов вы хотите создать?) установим первый флажок, т. е. выберем метод "main", чтобы затем меньше текста вводить руками, Остальное оставляем как есть и нажимаем кнопку Finish.
В папке src проекта try_rtjava появится файл HelloRTJava.java, Модифицируем его так, чтобы получить такое содержимое:
import javax.realtime.AsyncEventHandler;
import javax.realtime.POSIXSignalHandler;
public class HelloRTJava {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
POSIXSignalHandler.addHandler(POSIXSignalHandler.SIGUSR1,
new AsyncEventHandler () {
public void handleAsyncEvent() {
System.out.println ("I'm a POSIX signal handler!");
}
});
POSIXSignalHandler.addHandler(POSIXSignalHandler.SIGUSR2,
new AsyncEventHandler () {
public void handleAsyncEvent() {
System.out.println("Good by!");
System.exit(0);
}
});
while (true) {
try {
Thread.sleep(2000); }
catch (Exception e) {
System.err.println("POSIX signal example error: "
+ e.getMessage());
e.printStackTrace() ;
}
System.out.println("Kick me with the QNX command:");
System.out.println("slay -s SIGUSRI HelloRTJava");
System.out.println();
System.out.println("or kill me with the QNX command:");
System.out.println("slay -s SIGUSR2 HelloRTJava");
System.out.println();
}
}
}
В ыделим имя проекта в представлении Package Explorer и путем выбора элемента меню Project | Build Project скомпилируем класс. В каталоге bin проекта появятся файлы HelloRTJava.class, HeIloRTJava$l.class и HelloRTJava$2.class. Однако в окне навигатора Package Explorer их не видно — посмотрите через обычный Проводник Windows или откройте универсальное представление Navigator. Для этого можно, например, выбрать элемент меню Windows | Show Vew | Other. Затем в открывшемся окне выбрать элемент Navigator из группы General и нажать кнопку ОК.
Рис. 2.3. Создание класса HelloRTJava
Для запуска Java-приложения выберем элемент меню Run | Run. Класс HelloRTJava выполнится на установленной в нашей среде разработки виртуальной машине JamaicaVM — в представлении Console мы увидим периодически выводимые строки:
Kick me with the QNX command:
slay -s SIGUSR1 HelloRTJava
or kill me with the QNX command:
slay -s SIGUSR2 HelloRTJava
В среде Windows мы, в общем-то, не сможем ничего сделать. Поэтому просто уничтожьте процесс, когда вам надоест смотреть на выводимые строки (красная квадратная кнопка в представлении Console).
А теперь превратим байт-код класса HelloRTJava в исполняемый файл. Для этой цели проще всего воспользоваться Eclipse-модулем Jamaica и создать для Java-проекта try_rtjava соответствующий Ant-сценарий — сценарий на языке XML, предназначенный для автоматизации сборки проектов Java на основе использования программы ant. По сути дела, назначение программы ant в Java-проектах аналогично назначению программы make в проектах C/C++. Нажмем на панели инструментов на забавную кнопку с оранжевым пятнышком солнца и зеленой пальмой, затем в появившемся меню (рис. 2.4) выберем элемет Jamaica Ant Builds Configurations.
Рис. 2.4. Запуск диалога создания Ant-сценария
Откроется окно Jamaica Ant Builds Configurations. Выберем и левой части тип сценария, который мы хотим создать (Jamaica Ant Build), и нажмем кнопку создания новой конфигурации. Затем укажем имя сценария "SignalHandler" и нажмем кнопку Create new (рис. 11.9).
Рис. 11.9. Диалог создания Ant-сценария "SignalHandler"
Откроется окно, позволяющее задавать параметры Ant-сценария. Укажем имя проекта, тип целевой системы и имя класса, содержащего статический метод main (рис. 11.10).
Сохраним параметры, нажав кнопку Finish. В окне, показанном на рис. I l.l I, нажмем кнопку Apply.
Как результат, в списке слева вы увидите наш сценарий — "SignalHandler". Его файл (buildjamaica.xml) будет находиться в папке проекта try_rtjava. Сценарий можно запустить кнопкой Build или сделать это потом, а пока закройте окно кнопкой Close.
Созданный Ant-сценарий можно открыть в специальном редакторе. Для этого надо дважды щелкнуть мышью на имени файла Ant-сценария в проекте tryrtjava— buildjamaica.xml. Файл откроется в редакторе, как это показано на рис. 11.12.
На рис. 11.12 показано представление Overview редактора Ant-сценариев (обратите внимание на именование вкладки внизу в правой части). Вы можете построить исполняемый файл с помощью Ant-сценария buildjamaica.xml, щелкнув на гиперссылке
Рис. 11.10. Параметры Ant-сценария для создания исполняемого модуля
Build application by running this Jamaica Ant Script. Давайте так и сделаем — в результате в проекте появится исполняемый файл для ОСРВ QNX Neutrino — HelloRTJava.
Параметры Ant-сценария можно менять с помощью представления Options редактора Ant-сценариев (рис. 11.13).
Рис. 11.11. Окно мастера создания Ant-сценария перед нажатием кнопки Apply
Рис. 11.12. Редактор Ant-сценария — представление Overview
Рис. 11.13. Редактор Ant-сценария — представление Options