簡體   English   中英

java fx - 取決於上下文的不同行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM