Легко читать, но документация предполагает, что селектор файлов работает в отдельном потоке. Это означает, что ваша программа не ждет, пока файл будет выбран и функция selectInput завершена. Вместо этого он продолжает обрабатывать ваш код до тех пор, пока не будет выбран файл, затем нормальная обработка прерывается для обработки функции fileSelected.
В вашем коде это означает, что loadGame()
всегда будет работать до того, как у вас появится возможность выбрать файл. Решением является создание переменной, которая проверяет, был ли выбран файл.
В верхней части вашего кода создайте переменную:
boolean isFileSelected = false;
Перед загрузкой игры проверьте, был ли выбран файл:
if (gameLoaded == false && isFileSelected == true) {
loadGame();
gameLoaded = true;
}
Когда файл выбран, измените переменную:
void fileSelelected(File selection) {
if (selection == null) {
println("Nothing was selected, so nothing happens");
} else {
input = selection.getAbsolutePath();
isFileSelected = true;
}
}
Если это еще не полностью ясно, следующий сценарий может помочь понять концепцию. Как только программа запустится, она продолжит печатать start
, пока вы не выберете файл.
String test = "start";
void setup() {
selectInput("Select a file to process:", "fileSelected");
}
void draw(){
println(test);
}
void fileSelected(File selection) {
if (selection == null) {
println("Window was closed or the user hit cancel.");
} else {
println("User selected " + selection.getAbsolutePath());
test = "test";
}
}