【问题标题】:Creating image variable not working创建图像变量不起作用
【发布时间】:2016-05-26 15:02:51
【问题描述】:

所以我在eclipse中写了如下代码:

package myProgram;

import com.sun.glass.ui.Screen;
import com.sun.prism.paint.Color;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application implements EventHandler<ActionEvent> {

Button btn1;
Button btn2;
Button btn3;

public float[] winSize = {200, 400};

public static void main(String[] args){
    launch(args);
}

@Override
public void start(Stage stage) throws Exception {
    VBox layout = new VBox(10);
    layout.setAlignment(Pos.CENTER);
    Scene scene = new Scene(layout, winSize[0], winSize[1]);

    Rectangle2D rect = javafx.stage.Screen.getPrimary().getVisualBounds();
    stage.setY(rect.getMinY() + rect.getHeight() - winSize[1]);
    stage.setX(rect.getMinX() + rect.getWidth() - winSize[0]);

    //Not working part below
    Image imageDecline = new Image(getClass().getResourceAsStream("image.png"));
    Button button5 = new Button();
    button5.setGraphic(new ImageView(imageDecline));
    //

    btn1 = new Button("Close");
    btn1.setOnAction(e -> stage.close());
    btn1.setStyle("-fx-font: 20 arial");
    layout.getChildren().add(btn1);
    btn1.setMaxWidth(160);
    System.out.print(System.getProperty("user.dir").toString());

    btn2 = new Button("Open new Win");
    btn2.setOnAction(e -> {

    });
    btn2.setStyle("-fx-font: 20 arial");
    layout.getChildren().add(btn2);
    btn2.setMaxWidth(160);

    btn3 = new Button("Alert");
    btn3.setOnAction(e -> {

    });
    btn3.setStyle("-fx-font: 20 arial");
    layout.getChildren().add(btn3);
    btn3.setMaxWidth(160);

    stage.setScene(scene);
    stage.show();
}
public void handle(ActionEvent event){

}
}

但是如果我删除这部分它会起作用:

//Not working part below
Image imageDecline = new Image(getClass().getResourceAsStream("image.png"));
    Button button5 = new Button();
    button5.setGraphic(new ImageView(imageDecline));
    //

我在控制台中收到以下文本,但程序没有打开:

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Input stream must not be null
    at javafx.scene.image.Image.validateInputStream(Unknown Source)
    at javafx.scene.image.Image.<init>(Unknown Source)
    at myProgram.Main.start(Main.java:45)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source)
    ... 1 more
Exception running application myProgram.Main

有人知道为什么当我尝试创建一个变量来保存/引用(不​​确定).png 格式的图像时为什么会出现这个问题吗? 我想加载图像并且它处于脱机状态。而且我无法从类似问题的答案中理解如何解决这个问题,我的文件对我来说似乎非常不同。

【问题讨论】:

  • 名为“image.png”的图像在eclipse的源文件夹中
  • @VadimTatarnikov - 您是否尝试过使用图像的绝对路径来检查它是否有效?
  • 你的意思是这样的?:Image imageDecline = new Image("C:/Users/User/Desktop/image.png");
  • 我做了,还是不行

标签: java image button javafx resources


【解决方案1】:

通常请求的资源名称与现有资源不匹配。 特别是当没有提到文件夹/包时。 Eclipse 可以看到自己的资源,但部署的应用程序可能没有这些资源。

消除这种歧义的简单解决方案是在您的资源中包含文件夹并直接使用此名称。 喜欢的不是 image.png,而是 /images/image.png

我建议从根目录开始资源名称以消除其他相关混淆。

如果您仍然感到困惑,我建议您开始调查您的应用中拥有哪些资源。列出现有资源或尝试访问您认为的资源。然后您的代码中就会出现异常,并且可以很容易地看到问题所在。

【讨论】:

  • 什么意思,从根开始资源名?
  • 资源名称应以斜杠开头。像 /images/image.png。不像 image.png 或 images/image.png 使路径与您当前的位置相关(您尝试获取资源的实际类)。
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多