Исполняемый файл JAR не открывается при использовании с getResources (но работает с абсолютным путем к файлу) в JavaFX

Проблема: изменение двух строк кода приводит к тому, что исполняемый файл jar перестает открываться и работает, а не открывается (даже если он работает в Eclipse).

Описание: Я сделал приложение в JavaFX, используя локальные файловые каталоги (глупо знаю) для доступа к файлу.jpg, и я могу развернуть его как исполняемый файл, и он отлично работает на моем компьютере, используя этот фрагмент кода.

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

Как-то проблема возникает, когда я создаю исполняемый файл.jar..Jar открывается и прекрасно работает при использовании абсолютного пути, но когда я изменяю только 2 строки, исполняемый файл.jar не открывается.

Вот полный код.

package workingSamples;

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.VBox;
import javafx.stage.Stage;

public class ImageDisplay extends Application {

@Override
public void start(Stage stage) {
    stage.setTitle("HTML");
    stage.setWidth(500);
    stage.setHeight(500);
    Scene scene = new Scene(new Group());
    VBox root = new VBox();    

    final ImageView selectedImage = new ImageView(); 

    File file = new File( "C:\\Users\\Documents\\logo.jpg" );
    Image image1 = new Image( file.toURI( ).toString( ), 500, 200, true, true );

    //Image image1 = new Image(ImageDisplay.class.getResourceAsStream("logo.jpg"), 500, 200, true, true);        
    selectedImage.setImage(image1);

    root.getChildren().addAll(selectedImage);
    scene.setRoot(root);
    stage.setScene(scene);
    stage.show();
}

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

Этот файл.jar выполняется и открывается без ошибок, но если я раскомментирую одну закомментированную строку (и закомментирую две над ней), проект будет работать в Eclipse, но он не откроется, когда я экспортирую как исполняемый файл. И я получаю эту ошибку каждый раз, когда пытаюсь ее экспортировать:

Экспортируется с предупреждениями компиляции: WorkingSamples/src/workingSamples/ImageDisplay.java

Я попытался сохранить данные как в bin, так и в src, перезапустив Eclipse, убедившись, что режим отладки не работает, и попробовал все типы обработки библиотек. Может быть, это проблема с разрешением, но я не знаю, как это исправить.

Любая помощь будет принята с благодарностью! Заранее спасибо:)

(Я пробовал исправления из javafx jar-сборок нормально, но не открывается (к сожалению, у меня нет доступа к командной строке из-за ограничений безопасности компании) и я не могу запустить javafx JAR за пределами NetBeans (я не думаю, что есть какие-либо библиотеки которые нужно импортировать, но это не так) и не удается запустить Javafx с компьютера, дважды щелкнув файл jar (у меня установлена ​​последняя версия Java) и Eclipse - файл jar исполняемого файла с ошибкой (я перепробовал все варианты обработки библиотеки, но, возможно, это вопрос разрешения, которое я не знаю, как исправить))

Код, вдохновленный этим примером:

Вывод файла ANT:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Create Runnable Jar for Project WorkingSamples with Jar-in-  Jar Loader" default="create_run_jar">
<!--this file was created by Eclipse Runnable JAR file Export Wizard-->
<!--ANT 1.7 is required-->
<!--define folder properties-->
<property name="dir.buildfile" value="."/><property name="dir.workspace" value="C:/Users /Documents/Eclipse"/><property name="dir.jarfile" value="${dir.buildfile}"/><target name="create_run_jar"><jar destfile="${dir.jarfile}/workingSamples7.jar"><manifest><attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader"/><attribute  name="Rsrc-Main-Class" value="workingSamples.ImageDisplay"/><attribute  name="Class-Path" value="."/><attribute name="Rsrc-Class-Path" value="./  org.eclipse.fx.ide.css.jfx8_2.3.0.201603030809.jar"/></manifest><zipfileset  src="jar-in-jar-loader.zip"/><fileset  dir="${dir.workspace}/WorkingSamples/bin"/><zipfileset dir="C:/Users /Documents/   eclipse-java-mars-R-win32-x86_64/eclipse/plugins"    includes="org.eclipse.fx.ide.css.jfx8_2.3.0.201603030809.jar"/></jar></target>   </project>

1 ответ

Решение

Базовый каталог getResourceAsStream(...) это твой баночный корень. Я бы предложил разместить ваше изображение в папке ресурсов (в вашем случае) WorkingSamples/resources/logo.jpg После этого вы можете получить доступ к изображению с

Image image1 = new Image(ImageDisplay.class.getResourceAsStream("/resources/logo.jpg"), 500, 200, true, true);

Еще одна вещь, которую вы можете проверить, это то, что скрипт Ant помещает изображение в нужное место внутри банки.

Другие вопросы по тегам