Предпосылка нашего приложения (можно пропустить, если вы не считаете ее актуальной):
Мы создаем приложение для детей с аутизмом, позволяющее распознавать и понимать жесты и мимику. Мы делаем это, представляя историю, а затем даем им задание переключаться между различными жестами и выражениями лица, чтобы попытаться спланировать выражение и жест, которые, по их мнению, имеет или чувствует персонаж в этой истории. Затем у нас есть страница размышлений, где ребенок и учитель размышляют или обсуждают выбор, который сделал ребенок-аутист, а затем они могут вернуться и попробовать разные выражения лица и жесты. Если они довольны результатом, они могут завершить задание, и первая история будет завершена, а вторая откроется в библиотеке. Наша история будет состоять только из одного персонажа на протяжении обеих историй. Просто в разных сценариях.
Наша проблема с кодом:
Наш код сейчас не открывает наш файл FXML, а вместо этого печатает путь к файлу FXML. в бесконечном цикле, и мы думаем, что это из-за проблемы в методе инициализации класса StoryController. В частности, метод loadScene вызывается неоднократно в цикле, вызывая загрузку файла FXML снова и снова (мы думаем). Так как же нам это исправить? Мы пробовали запрашивать различные инструменты искусственного интеллекта и искали документацию FXML на Java и тому подобное. Однажды цикл был случайным образом исправлен, а затем мы получили исключение nullpointerException для нашего URL-адреса нашего файла Story FXML.
У нас есть несколько других классов, но они еще не созданы, поэтому это первый шаг в нашем процессе реализации. , и мы не можем идти дальше, пока не исправим эту проблему... Будем благодарны за любую помощь. Спасибо.
Это наш код StoryController с загрузкой и методом инициализации:
package PACKAGE_NAME.src.main.project.classes;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
public class StoryController {
@FXML
private Label titleLabel;
@FXML
private Label storyDescriptionLabel;
private int currentStory = 0;
private List stories = new ArrayList();
public StoryController() {
loadStoriesFromFile("src/main/project/classes/Stories/Story.txt");
}
public List getStories() {
return stories;
}
/**
* @param filename This method reads the stories from a file and adds them to the stories list.
* It seperates the title and the story description by a comma.
*/
private void loadStoriesFromFile(String filename) {
// The method uses a try-with-resources statement to ensure that the BufferedReader is closed after it's no longer needed. This is a good practice to avoid resource leaks.
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line;
Story previousStory = null;
// While loop to read the file line by line
while ((line = reader.readLine()) != null) {
// Each line is split into parts using a comma (,) as the delimiter.
String[] parts = line.split(",");
// The first part is considered the title, and the second part is considered the story description.
String title = parts[0];
String storyDescription = parts[1];
// A new Story object is created using the extracted title and story description.
Story story = new Story(title, storyDescription);
// Then add the newly created story object to the "stories" ArrayList.
stories.add(story);
}
// If any IOException occurs during the file reading process, it's caught and the error message is printed to the console.
// IOException is typically thrown when an error occurs while performing input or output operations, such as reading or writing to a file
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* if the story list is not empty, it sets the title and story description of the first story
* in the list to the corresponding labels.
*/
@FXML
public void initialize() {
// Check if the stories ArrayList is not empty
if (!stories.isEmpty()) {
for (int i = 0; i < stories.size(); i++) {
String title = stories.get(i).getTitle();
titleLabel.setText(title);
storyDescriptionLabel.setText(stories.get(i).getStoryDescription());
// Load the scene for the story
loadScene(currentStory + 1);
}
}
}
private void loadScene(int storyNumber) {
try {
// Append the story number to the ".fxml"
String fxmlFile = "/Story" + storyNumber + ".fxml";
System.out.println("Loading FXML file: " + fxmlFile);
URL url = getClass().getResource(fxmlFile);
System.out.println(url);
// Load the FXML file
Parent root = FXMLLoader.load(url);
// Get the current stage
Stage stage = (Stage) titleLabel.getScene().getWindow();
// Set the new scene
stage.setScene(new Scene(root));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Кроме того, у нас также есть класс LibraryController, если это необходимо:
Библиотека в нашем приложении предназначена для того, чтобы пользователь мог выбирать между историями. (мы собираемся реализовать только два)
package PACKAGE_NAME.src.main.project.classes;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.event.ActionEvent;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.Objects;
public class LibraryController {
@FXML
private GridPane gridPane;
@FXML
public void spil(ActionEvent event) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Story1.fxml"));
Parent root = loader.load();
Scene scene = new Scene(root);
Stage stage = (Stage)((Node)event.getSource()).getScene().getWindow();
stage.setScene(scene);
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... file-to-be
Бесконечный цикл между «loadScene» и «инициализацией», из-за которого наш файл FXML загружается снова и снова. ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Встроение FXML в FXML: доступ к родительскому контроллеру и переключение между FXMLS
Anonymous » » в форуме JAVA - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Встроение FXML в FXML: доступ к родительскому контроллеру и переключение между FXMLS
Anonymous » » в форуме JAVA - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Встроение FXML в FXML: доступ к родительскому контроллеру и переключение между FXMLS
Anonymous » » в форуме JAVA - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-