Я делаю настольное приложение, которое просматривает папку, используя watchservice из java.nio.file. Но мне нужно загрузить графический интерфейс перед тем, как я начну смотреть, потому что путь, который нужно просмотреть, находится в JFieldText в пользовательском интерфейсе.
public class FileArchiverApp extends SingleFrameApplication {
static FileArchiverView gui;
@Override protected void startup() {
gui = new FileArchiverView(this); //HERE0 I have to wait for this.
show(gui);
...
public static void main(String[] args) throws IOException {
launch(FileArchiverApp.class, args);
....
WatchService watcher = FileSystems.getDefault().newWatchService();
// HERE1 while(gui==null) System.out.println("hi") ;
try {
Path dir = Paths.get(gui.getOriginPath()); // HERE2 I get nullpointer if gui was not ready
WatchKey key = dir.register(watcher, ENTRY_CREATE );
} catch ( Exception x) {
System.err.println(x);
}
while(true){ /*wait for new file event loop*/ }
}
Функция getOriginPath () возвращает getText () из текстового поля, которое я упомянул.
В HERE0 указана авторство. Я получаю нулевой указатель в ЗДЕСЬ2, если графический интерфейс не был готов.
Я пробовал вещи. Если я помещу эту вещь в ЗДЕСЬ1, она будет работать, но, конечно, я не хочу этого делать.
Как я мог это сделать?
И это занимает много времени (например, две секунды) или графический интерфейс перестает быть нулевым с этим ЗДЕСЬ1. Я не знаю, происходит ли это из-за печати, но я ожидал, что это будет почти мгновенно. Это нормально?
Спасибо.