Бесконечный цикл между «loadScene» и «инициализацией», из-за которого наш файл FXML загружается снова и снова.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Бесконечный цикл между «loadScene» и «инициализацией», из-за которого наш файл FXML загружается снова и снова.

Сообщение Anonymous »

Предпосылка нашего приложения (можно пропустить, если вы не считаете ее актуальной):
Мы создаем приложение для детей с аутизмом, позволяющее распознавать и понимать жесты и мимику. Мы делаем это, представляя историю, а затем даем им задание переключаться между различными жестами и выражениями лица, чтобы попытаться спланировать выражение и жест, которые, по их мнению, имеет или чувствует персонаж в этой истории. Затем у нас есть страница размышлений, где ребенок и учитель размышляют или обсуждают выбор, который сделал ребенок-аутист, а затем они могут вернуться и попробовать разные выражения лица и жесты. Если они довольны результатом, они могут завершить задание, и первая история будет завершена, а вторая откроется в библиотеке. Наша история будет состоять только из одного персонажа на протяжении обеих историй. Просто в разных сценариях.
Наша проблема с кодом:
Наш код сейчас не открывает наш файл 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Intellij javafx module info.java: модуль считывает пакет «javafx.fxml» как из "javafx.fxml ', так и" javafx.fxml'
    Anonymous » » в форуме JAVA
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Встроение FXML в FXML: доступ к родительскому контроллеру и переключение между FXMLS
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Встроение FXML в FXML: доступ к родительскому контроллеру и переключение между FXMLS
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Встроение FXML в FXML: доступ к родительскому контроллеру и переключение между FXMLS
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Бесконечный цикл при преобразовании django в exe-файл
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»