Можно ли вызвать основной цикл событий Java? - PullRequest
3 голосов
/ 11 октября 2010

Я не смог найти ответа на этот вопрос. Интересно, возможно ли это? Здесь моя проблема.

У меня есть приложение для обработки ядра, написанное на Фортране. Приложение нуждается в новом пользовательском интерфейсе. Код на Фортране имеет свой основной цикл. Общается с пользовательским интерфейсом через процедуру интерфейса. Эта процедура вызывает основной цикл событий любую используемую библиотеку пользовательского интерфейса, например текущий пользовательский интерфейс - Motif. Так это называет Цикл основного события Motif. Я хотел бы заменить Motif на Java Swing. Я не смог найти вещь в цикле событий Java. Мои вопросы
1) Можно ли вызвать основной цикл Java напрямую?
2) Я знаю, что Java может называть другой язык. Как другой язык может вызывать подпрограммы Java?

-------------- Дополнительные комментарии

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

цикл до завершения
выполнить внутреннюю обработку
1 проверка очереди событий пользовательского интерфейса если в очереди есть событие
2 вызов диспетчера событий пользовательского интерфейса для всех событий пользовательского интерфейса
конец цикла

что мне нравится знать, есть ли какая-нибудь рутина, чтобы заменить # 1 и # 2. Я надеялся, что в Java есть что-то вроде EventQueue.hasEvent ();
EventQueue.dispatchEvent (event);

Из комментариев пока что не похоже, что есть такая вещь.

Ответы [ 4 ]

4 голосов
/ 11 октября 2010
  1. SwingUtilities.invokeAndWait() и invokeLater()
  2. JNI можно использовать для встраивания JVM в собственное приложение и связи с ним через связанную библиотеку. Но в вашем сценарии, вероятно, лучше всего, чтобы пользовательский интерфейс запускался как отдельный процесс и взаимодействовал с основным приложением через сокеты.
1 голос
/ 11 октября 2010

Нет, вы не можете напрямую вызывать основной цикл событий GUI; тем не менее, вы можете отправлять элементы в основной цикл событий, чтобы в конечном итоге запустить его в потоке.

Цикл основного события делает много вещей в графическом интерфейсе, некоторые из них планируют графику для рисования, принимают ввод и т. Д. Это проектный выбор, и Java использовала многопоточную модель, где Код GUI не запускается в цикле событий GUI. Причина этого, вероятно, заключается в том, что цикл графического интерфейса пользователя может быть приостановлен или поврежден, что вызывает проблемы с производительностью графического интерфейса.

0 голосов
/ 11 октября 2010

Вы можете изменить свое приложение, чтобы оно выполнялось как приложение Java, и вызывать ваши материалы на Fortran через JNI.Затем в вашем Java-приложении вы можете получить системную очередь событий на Toolkit.getDefaultToolkit().getSystemEventQueue() и вызвать ее peekEvent и postEvent.

0 голосов
/ 11 октября 2010

Вам следует взглянуть на собственный интерфейс Java (вопрос 2;))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...