Я получаю ошибки в своем коде, и я не знаю, как исправить (Java fx stackPane) - PullRequest
0 голосов
/ 23 марта 2020

Итак, вот мой код. Это очень простой проект, но я думаю, что некоторые модули не могут корректно загружаться по какой-либо причине, и поэтому я ищу помощь от кого-то, кто знает немного о javafx и java IDE. В основном. Я просто пытаюсь напечатать стековую панель с одним изображением и разными фигурами с помеченным текстом рядом с ними. Этот код должен работать очень хорошо, и я попробовал все, что нашел, но ничего не получилось, и я думаю, что это особый случай. Я попытался изменить конфигурации запуска, изменить sdk, максимально поэкспериментировать со структурой проекта, но ничего не устранило эту ошибку

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.Label;
import javafx.scene.control.ContentDisplay;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Ellipse;
public class LabelWithGraphic extends Application {
   @Override
   public void start(Stage primaryStage) {
      ImageView leb = new ImageView(new Image("lebanon.jpg"));
      Label lb1 = new Label("Lebanon\n Our beloved country", leb);
      lb1.setStyle("-fx-border-color: red; -fx-border-width: 4");
      lb1.setContentDisplay(ContentDisplay.TOP);
      lb1.setTextFill(Color.LIMEGREEN);
      Label lb2 = new Label("Circle", new Circle(50, 50, 25));
      lb2.setContentDisplay(ContentDisplay.BOTTOM);
      lb2.setTextFill(Color.MAGENTA);
      Label lb3 = new Label("Rectangle", new Rectangle(10, 10, 50, 25));
      lb3.setContentDisplay(ContentDisplay.RIGHT);
      Label lb4 = new Label("Ellipse", new Ellipse(50, 50, 50, 25));
      lb4.setContentDisplay(ContentDisplay.LEFT);
      Ellipse ellipse = new Ellipse(50, 50, 50, 25);
      ellipse.setStroke(Color.AQUAMARINE);
      ellipse.setFill(Color.WHITE);
      StackPane stackPane = new StackPane();
      stackPane.getChildren().addAll(ellipse, new Label("JavaFx"));
      Label lb5 = new Label("A pane inside a label", stackPane);
      lb5.setContentDisplay(ContentDisplay.BOTTOM);
      HBox pane = new HBox(20);
      pane.getChildren().addAll(leb, lb2, lb3, lb4, lb5);

      Scene scene = new Scene(pane, 450, 150);
      primaryStage.setTitle("Hi guys :D");
      primaryStage.setScene(scene);
      primaryStage.show();
   }
}

И вот эта ошибка, которую я получаю:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found
    at javafx.graphics/javafx.scene.image.Image.validateUrl(Image.java:1107)
    at javafx.graphics/javafx.scene.image.Image.<init>(Image.java:617)
    at LabelWithGraphic.start(LabelWithGraphic.java:19)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    ... 1 more
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
    at javafx.graphics/javafx.scene.image.Image.validateUrl(Image.java:1099)
    ... 11 more

Я все еще относительно новичок в java FX, и я понятия не имею, что я делаю неправильно. Я перепробовал много решений, но ни одно из них не исправляет, я также использую IntelliJ IDE, и javafx не был встроен в него, поэтому мне пришлось скачать его и добавить его вручную. Любая помощь будет оценена

1 Ответ

0 голосов
/ 23 марта 2020

Храните файл изображения в папке ресурсов и используйте следующий код. Я пытался, и это работало нормально.

InputStream is = getClass().getClassLoader().getResourceAsStream("lebanon.jpg");
ImageView leb = new ImageView(new Image(is));
...