Nano Hash - криптовалюты, майнинг, программирование

Запуск приложения javafx вне среды IDE Netbeans

У меня возникают проблемы с запуском приложения javaFX через .jar в «папке dist» позже, когда я очищаю и собираю проект с помощью NetBeans.

C:\NetBeansProjects\Gestore\dist>java -jar
Gestore.jar
log4j:ERROR Could not read configuration file [conf\log4j.properties].
java.io.FileNotFoundException: conf\log4j.properties (Impossibile trovare il per
corso specificato)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurato
r.java:372)
        at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.
java:403)
        at gestore.Gestore.<init>(Gestore.java:97)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
rce)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherIm
pl.java:276)
        at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:
47)
        at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
        at java.lang.Thread.run(Unknown Source)
log4j:ERROR Ignoring configuration file [conf\log4j.properties].
log4j:WARN No appenders could be found for logger (gestore.Utility).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more in
fo.
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.javafx.main.Main.launchApp(Main.java:642)
        at com.javafx.main.Main.main(Main.java:805)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherIm
pl.java:403)
        at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:
47)
        at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.SecurityException: class "javafx.scene.control.Dialogs"'s s
igner information does not match signer information of other classes in the same
 package
        at java.lang.ClassLoader.checkCerts(Unknown Source)
        at java.lang.ClassLoader.preDefineClass(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at gestore.Gestore.loadEserciziFromDB(Gestore.java:407)
        at gestore.Gestore.start(Gestore.java:178)
        at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
        at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215)
        at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179
)
        at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176
)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29
)
        at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
        ... 1 more

Но если я запускаю проект из NetBeans, все работает отлично. И если я попытаюсь (позже запустить в NetBeans) запустить приложение из папки dist, все работает отлично. По факту

C:\NetBeansProjects\Gestore\dist>java -jar
Gestore.jar
log4j:ERROR Could not read configuration file [conf\log4j.properties].
java.io.FileNotFoundException: conf\log4j.properties (Impossibile trovare il per
corso specificato)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurato
r.java:372)
        at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.
java:403)
        at gestore.Gestore.<init>(Gestore.java:97)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
rce)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherIm
pl.java:276)
        at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:
47)
        at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
        at java.lang.Thread.run(Unknown Source)
log4j:ERROR Ignoring configuration file [conf\log4j.properties].
log4j:WARN No appenders could be found for logger (gestore.Utility).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more in
fo.

Поэтому я думаю, что проблема вызвана Java.Lang.SecurityException (да, я знаю, что есть проблема со свойствами log4j), и, возможно, здесь https://github.com/marcojakob/javafx-ui-sandbox/issue/5 решение есть, но зачем??


  • Какую IDE и систему сборки вы используете? 30.09.2013
  • NetBeans. Система сборки, предоставляемая NetBeans 30.09.2013
  • Я увидел, что вы используете NetBeans сразу после того, как я опубликовал этот комментарий. Итак, я предполагаю, что вы используете ant в качестве системы сборки, а не maven. Проблема в том, что сборка ant не создает исполняемый файл jar. Ищите сообщения на javafxpackager, чтобы создать исполняемый файл jar, или переключитесь на maven и используйте javafx-maven-plugin с zenjava.com. 30.09.2013
  • Извините, но в документации JavaFX Oracle я прочитал, что возможно: docs .oracle.com/javafx/2/get_started/ 30.09.2013
  • Внесли ли вы необходимые изменения в файл build.xml? Вы можете запустить веб-сайт с файлом jnlp? 30.09.2013

Ответы:


1

В чем проблема

Проект javafx-ui-sandbox, на который вы ссылаетесь, устарел и несовместим с более поздними версиями JavaFX под некоторые обстоятельства.

Как это исправить

Вместо этого я советую использовать ControlsFX. ControlsFX имеет все функции javafx-ui-sandbox (и даже больше) и построен так, что не конфликтует с системными классами JavaFX. Это также гораздо более активно поддерживаемый и развиваемый проект.

Если вы не можете использовать минимальную версию Java 8, необходимую для последней версии ControlsFX, раньше был Бэкпорт ControlsFX 2.x, но в нем больше нет соответствующего контента.

Следует длинное и ненужное объяснение

javafx-ui-sandbox была системой прототипирования, включающей классы, конфликтующие с классами, включенными в некоторые дистрибутивы Java, поэтому вы получаете:

Caused by: java.lang.SecurityException: class "javafx.scene.control.Dialogs"'s 
  signer information does not match signer information of other classes 
  in the same package.  

Здесь происходит то, что вы включаете класс javafx-ui-sandbox (javafx.scene.control.Dialogs) в файле jar и подписываете его (вероятно, вы используете NetBeans и установите флажок для самостоятельной подписи jar-файлов, но есть и другие способы подписи). Итак, вы подписываете свои jar-файлы другим сертификатом, чем Oracle, используемый для подписи jar-файлов JavaFX. JAR-файлы JavaFX содержат большую часть кода пакета javafx.scene.control. Как часть неясного правила Java, вы не можете подписывать код в одном пакете двумя разными сертификатами, иначе это создаст исключение безопасности.

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

Простое решение для вас — просто скопировать исходный код javafx-ui-sandbox в свой проект и изменить имя пакета с javafx.scene.control на другое (например, com.yourcompany.control). Таким образом, пакеты классов не будут конфликтовать с пакетами по умолчанию, предоставленными для системы JavaFX, и вы сможете подписывать свой код (включая класс com.yourcompany.control.Dialogs), не вызывая никаких проблем. Но опять же, вам, вероятно, лучше использовать библиотеку ControlsFX.

01.10.2013
  • Привет, драгоценности, спасибо за исчерпывающий ответ и за полезное длинное и ненужное объяснение. Бэкпорт ControlsFX 2.x больше не поддерживается? Потому что я вижу только файл readme :) Поэтому я думаю использовать решение ControlFX 01.10.2013
  • О, да, похоже, это так =› сейчас доступна только версия ControlsFX для Java 8. (Я обновил свой ответ, чтобы отразить это). 01.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..