Я разрабатываю приложение, которое в течение некоторого времени, вероятно, будет использовать только командную строку. Возможно, когда-нибудь будет уместно дать ему всю визуальную обработку JavaFX: окна, диалоги и т. д.
В настоящее время мне нужно разрешить пользователям выбирать файлы/каталоги из любой точки файловой системы. То, как я это сделал, состоит в том, чтобы сделать мой основной класс ConsoleHandler
подклассом из JavaFX Application
и запустить start()
в начале прогона, так что фактически приложение работает в потоке JavaFX. Это означает, среди прочего, что поток позволяет отображать JavaFX FileChooser
, а также ожидает, пока пользователь выбирает файл(ы)/каталоги...
Но это кажется таким НЕПРАВИЛЬНЫМ! Это не (по крайней мере пока) «визуальное» приложение. Я бы предпочел обработать «ожидание пользовательского ввода» чем-то простым, например ExecutorService
, и использовать обычные Thread
s.
Я ценю, что средство выбора файлов действительно является «визуальной» функцией само по себе, и, очевидно, задействовано «событие», такое как нажатие кнопки «Выбрать»: но необходимость использовать всю инфраструктуру JavaFX для этой цели кажется глупый. Мне интересно, может ли существовать что-то более основанное на типизации.
NB У меня нет желания использовать Swing JFileChooser
: применимы аналогичные мысли, и Swing - это прошлое.
В настоящее время я планирую обойти это, выделив всю функциональность FileChooser
в изолированный модуль... но я просто подумал, что хотел бы спросить, знает ли кто-нибудь способ полностью избежать JavaFX для этого варианта использования.
Application.start()
. Если вам нужно показать средство выбора файлов из фонового потока, оберните вызовы к нему вPlatform.runLater()
. Это должно дать вам больше гибкости для перехода на приложение с полным пользовательским интерфейсом (или даже на приложение, полностью не связанное с пользовательским интерфейсом) позже. - person James_D   schedule 13.04.2018