Моя цель - выбрать файл из диалогового окна «открыть файл», прочитать его и нарисовать объекты на основе содержимого файла. Я нашел способ открыть это диалоговое окно (см. Код скелета ниже), однако программа PDE запускается рисунок ПЕРЕД Я могу выбрать файл. Поскольку чертеж зависит от содержимого выбранного файла, я получаю ошибку с нулевым указателем.Обработка 2.0 - Открыть диалог с файлом
Мой вопрос в том, как я могу выбрать файл до начала метода рисования?
Если я определяю свой файл (Amas.in) явно в setup(), все хорошо, программа показывает мой вывод на основе данного файла.
Если я использую selectInput (...), я получаю диалоговое окно с запросом на имя файла ПОСЛЕ того, как draw() запущен, что приводит к ошибке указателя.
Если я определяю свой файл явно, а затем вызываю selectInput (...), программа начинает рисовать объекты в соответствии с исходным файлом, а затем спрашивает , какой новый файл я хочу; однако после выбора моего нового файла программа игнорирует содержимое этого нового файла.
Оба файла Amas.in по умолчанию и мой другой файл находятся в папке с данными.
Что я делаю неправильно?
Заранее благодарим за любые советы.
String myInputFile ;
void setup() {
selectInput("Select a file : ", "fileSelected");
String[] lines = loadStrings("Amas.in"); // works
//String[] lines = loadStrings(myInputFile); // doesn't work
}
void draw() {
ellipse(mouseX, mouseY, 9, 9);
println("Selected at this point " + myInputFile);
}
void fileSelected(File selection) {
if (selection == null) {
myInputFile = "Amas.in" ;
println("Default file is opened : " + myInputFile);
} else {
myInputFile = selection.getAbsolutePath() ;
println("User selected " + myInputFile);
}
}
Благодарим Вас за отзыв! – Eric
Спасибо за ваш отзыв! Дело в том, что проблема в том, что программа не ждет ответа на диалог, поэтому, если myInputFile имеет значение null, я получаю сообщение об ошибке. Лучший способ увидеть, что я имею в виду, - создать папку с двумя файлами (Amas3d.in и еще один), содержимое которых не имеет отношения к этому скелетному коду и запускает его. Дело в том, что draw() начинается до того, как будет получен результат диалогового окна. Испытание в розыгрыше было бы пустой тратой процессора. Должен быть способ дождаться ответа на диалоговое окно перед тем, как выполнить draw(). Все остальные языки, которые я знаю, это делают. – Eric
Теперь, я думаю, что понимаю вас, вам нужно подумать о двух разных вещах: filePath и fileContents. Я снова отредактировал код выше, проверьте его; –