【问题标题】:Dice Simulator using JavaFX, images not appearing使用 JavaFX 的骰子模拟器,图像未出现
【发布时间】:2020-03-13 03:26:54
【问题描述】:

我一直在尝试创建一个骰子模拟器,我将在其中创建一个模拟掷骰子的JavaFX 应用程序。当用户单击一个按钮时,我的应用程序将生成两个随机数,每个数字的范围在 1 到 6 之间,以表示骰子的值。然后我的应用程序将使用ImageView 控件显示骰子。

一切正常,除了我的骰子图像不会出现。我也没有收到任何错误,应用程序运行良好。我做错了什么,为什么我的骰子图像不会出现?非常感谢任何帮助,谢谢大家。

DieRoll 类

import java.util.Random;

public class DieRoll 
{
    int rollNum;
    int sides = 6;
    
    public void roll()
    {
        Random rand = new Random();
        rollNum = rand.nextInt(sides) + 1;
    }
    
    public int getRoll()
    {
        return rollNum;
    }
}

DieImages 类

import javafx.scene.image.Image;

public class DieImages 
{
    Image pic1 = new Image("file:images/1Die.bmp");
    Image pic2 = new Image("file:images/2Die.bmp");
    Image pic3 = new Image("file:images/3Die.bmp");
    Image pic4 = new Image("file:images/4Die.bmp");
    Image pic5 = new Image("file:images/5Die.bmp");
    Image pic6 = new Image("file:images/6Die.bmp");
    
    private int value;
    private Image dieImage = pic1;
    
    public void setImage(int sides)
    {
        int value = sides;
        if(value == 1)
            dieImage = pic1;
        if(value == 2)
            dieImage = pic2;
        if(value == 3)
            dieImage = pic3;
        if(value == 4)
            dieImage = pic4;
        if(value == 5)
            dieImage = pic5;
        if(value == 6)
            dieImage = pic6;
    }
    
    public Image getImage()
    {
        return dieImage;
    }
    
}

骰子模拟器类

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.layout.HBox;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.geometry.Insets;
import java.util.Random;

public class DiceSimulator extends Application
{
     private ImageView viewDie1 = new ImageView();
     private ImageView viewDie2 = new ImageView();
     private Label resultDie;
     private Label message1;
     private Label message2;
     
     public static void main(String[] args)
       {
          // Launch the application.
          launch(args);
       }
       
       @Override
       public void start(Stage primaryStage)
       {
           primaryStage.setTitle("Dice Simulator");
           Label message1 = new Label("Welcome to the Dice Simulator!");
           Label message2 = new Label("Please hit start to roll the dice!");
           
           resultDie = new Label();
           Button startButton = new Button("Start!");
           
           startButton.setOnAction(new StartButtonHandler()); 
           
           HBox hbox = new HBox(10, viewDie1, viewDie2);
           
           VBox vbox = new VBox(10, message1, message2, startButton, hbox, resultDie);
           vbox.setPadding(new Insets(15));
           vbox.setAlignment(Pos.CENTER);
           
           Scene simulatorScene = new Scene(vbox);
           primaryStage.setScene(simulatorScene);
           primaryStage.show();
           
           
       }
       
       class StartButtonHandler implements EventHandler<ActionEvent>
       {
           @Override
           public void handle(ActionEvent event)
           {
               int num1 = 0;
               int num2 = 0;
               Image diePic1; 
               Image diePic2;

               DieRoll dieI = new DieRoll();
               DieRoll dieII = new DieRoll();
               dieI.roll();
               dieII.roll();
               num1 = dieI.getRoll();
               num2 = dieII.getRoll();
               
               DieImages image1 = new DieImages();
               DieImages image2 = new DieImages();
               image1.setImage(num1);
               image1.setImage(num2);
               diePic1 = image1.getImage();
               diePic2 = image2.getImage();
               
               viewDie1 = new ImageView(diePic1);
               viewDie2 = new ImageView(diePic2);
               
               resultDie.setText("You rolled a " + num1 + " and " + num2 + "!");
           }
       }
       
         
}

【问题讨论】:

    标签: java javafx imageview simulator dice


    【解决方案1】:

    Java 找不到你告诉它显示的文件,为什么JavaFX 不抛出错误,不知道。

    如果单独运行文件,则相对位置(如您现在指定的位置)从 java 文件开始,如果通过 ide 运行文件,则从项目根目录开始。

    出于测试目的,请尝试使用绝对位置指定文件位置,例如对于 Linux 的 /home/user/images/1Die.bmp 或对于 Windows 的 C:\Users\user\images\1Die.bmp

    【讨论】:

    • 使用当前工作目录解析相对路径。这可能与您的描述相匹配,但一般情况下它不...(无论如何您都没有运行.java 文件;.class 文件用作java 可执行文件的“源”。编译器使用.java 文件,但编译时图像的位置无关紧要。)
    • 我想我做出了错误的假设,即您将从同一目录编译和运行。对不起
    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多