[英]java fx - different behaviour depending on context
如果這對你來說是一件容易的事情,我很抱歉,但我的想法令人難以置信。 經過幾年完全沒有編程,我正在開發一個寵物項目(基於 2d tile 的游戲引擎),我想在其中使用 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 在自己的線程中運行,應用程序窗口打開,但它是空的。 我完全不明白,這是為什么呢? 有人可以對此有所了解嗎?
更新:我偶然遇到了不同的工作環境。 解決這個問題解決了這個問題。
更新:我偶然遇到了不同的工作環境。 解決這個問題解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.