如果这对你来说很容易,我很抱歉,但我的想法令人难以置信。在几年完全不编程之后,我正在进行一个宠物项目(基于2d tile的游戏引擎(,我想使用JavaFX无头游戏来利用图形功能。我已经从这里和这里了解
为了初始化图形系统,您需要将其转换为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在自己的线程中运行,应用程序窗口打开,但它是空的。我一点也不明白,为什么?有人能解释一下吗?
更新:我偶然有了不同的工作环境。解决了这个问题。
UPDATE:我偶然有了不同的工作环境。解决了这个问题。