мои извинения, если это легко для вас, но мой разум поражает. После нескольких лет отсутствия программирования я работаю над любимым проектом (игровой движок на 2d-плитке), где я хотел бы использовать Java FX без головы, чтобы использовать графические возможности. Из здесь и здесь
я понял, что вам нужно Java FX-приложение для инициализации графической системы. Поэтому я в основном взял пример ImageViewer и реализовал Runnable:
package net.ck.game.test;
import java.io.BufferedReader;
import java.util.ArrayList;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class ImageTest extends Application implements Runnable {
protected static final Logger logger = (Logger) LogManager.getLogger(ImageTest.class);
BufferedReader x;
@Override public void start(@SuppressWarnings("exports") Stage stage) {
logger.error(Thread.currentThread().getName() + ", executing run() method!");
Image standardImage = new Image("file:graphics/image1.png");
logger.error("image height image1: "+ standardImage.getHeight());
logger.error("image width image1:" + standardImage.getWidth());
Image movingImage = new Image("file:graphics/image2.png");
ArrayList<Image> images = new ArrayList<Image>();
images.add(movingImage);
images.add(standardImage);
ImageView iv1 = new ImageView();
iv1.setImage(standardImage);
ImageView iv2 = new ImageView();
iv2.setImage(movingImage);
Group root = new Group();
Scene scene = new Scene(root);
scene.setFill(Color.BLACK);
HBox box = new HBox();
box.getChildren().add(iv1);
box.getChildren().add(iv2);
root.getChildren().add(box);
stage.setTitle("ImageView");
stage.setWidth(415);
stage.setHeight(200);
stage.setScene(scene);
stage.sizeToScene();
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void run()
{
Application.launch(ImageTest.class);
}
}
Когда я запускаю это как свое собственное приложение, оно работает нормально и отображает два изображения, которые я хочу, чтобы оно отображало.
Когда Я запускаю его так в конструкторе «игры»:
public class Game {
private boolean animated;
public boolean isAnimated() {
return animated;
}
public void setAnimated(boolean animated) {
this.animated = animated;
}
public Game() {
setAnimated(true);
if (isAnimated() == true)
{
ImageTest imageTest = new ImageTest();
new Thread(imageTest).start();
}
}
Нет ошибок, ImageTest запускается в своем собственном потоке, окно приложения открывается, но оно пустое. Я не понимаю этого вообще, почему это? Может, кто-то может пролить свет на это?
ОБНОВЛЕНИЕ: Я случайно столкнулся с разными рабочими условиями. Исправление этой проблемы решило проблему.