所以我在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格式的图像时,是否有人知道为什么会出现此问题? 我想加载一个图像,它是离线的。我无法理解如何从类似问题的答案中解决这个问题,我的文件似乎与我截然不同。
答案 0 :(得分:3)
通常,请求的资源名称与现有资源不匹配。 特别是当没有提到文件夹/包时。 Eclipse可以看到自己的资源,但部署的app可能没有它们。
消除这种歧义的简单解决方案是在您的资源中使用文件夹并直接使用此名称。 不像 image.png 但 /images/image.png
我建议从根目录启动资源名称以消除其他相对混淆。
如果您仍感到困惑,我建议您开始调查应用中的资源。列出现有资源或尝试访问您认为的内容。然后,您的代码中会出现异常,并且可以轻松查看错误。