Исполняемый файл 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 помещает изображение в нужное место внутри банки.