java .lang.NoClassDefFoundError: javafx / embed / swing / JFXPanel (Apache Плагин Felix Maven Bundle) - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь использовать класс JFXPanel с Apache Felix Maven Bundle Plugin. Я пытался экспортировать классы JavaFX в пакет с тегом, но всегда получаю исключение NoClassDefFoundError:

    ERROR  10:08:15  Uncaught Exception in thread 'AWT-EventQueue-0'
java.lang.NoClassDefFoundError: javafx/embed/swing/JFXPanel
    at edu.stanford.bmir.protege.examples.view.Metrics.<init>(Metrics.java:42) ~[na:na]
    at edu.stanford.bmir.protege.examples.view.ExampleViewComponent.initialiseOWLView(ExampleViewComponent.java:17) ~[na:na]
    at org.protege.editor.owl.ui.view.AbstractOWLViewComponent.initialise(AbstractOWLViewComponent.java:43) ~[na:na]
    at org.protege.editor.core.ui.view.View.createContent(View.java:413) ~[na:na]
    at org.protege.editor.core.ui.view.View.createUI(View.java:220) ~[na:na]
    at org.protege.editor.core.ui.view.View$1.hierarchyChanged(View.java:124) ~[na:na]
    at java.awt.Component.processHierarchyEvent(Component.java:6700) ~[na:1.8.0_121]
    at java.awt.Component.processEvent(Component.java:6319) ~[na:1.8.0_121]
    at java.awt.Container.processEvent(Container.java:2236) ~[na:1.8.0_121]
    at java.awt.Component.dispatchEventImpl(Component.java:4889) ~[na:1.8.0_121]
    at java.awt.Container.dispatchEventImpl(Container.java:2294) ~[na:1.8.0_121]
    at java.awt.Component.dispatchEvent(Component.java:4711) ~[na:1.8.0_121]
    at java.awt.Component.createHierarchyEvents(Component.java:5549) ~[na:1.8.0_121]
    at java.awt.Container.createHierarchyEvents(Container.java:1445) ~[na:1.8.0_121]
    at java.awt.Container.createHierarchyEvents(Container.java:1441) ~[na:1.8.0_121]
    at java.awt.Container.createHierarchyEvents(Container.java:1441) ~[na:1.8.0_121]
    at java.awt.Container.createHierarchyEvents(Container.java:1441) ~[na:1.8.0_121]
    at java.awt.Container.createHierarchyEvents(Container.java:1441) ~[na:1.8.0_121]
    at java.awt.Component.show(Component.java:1639) ~[na:1.8.0_121]
    at java.awt.Component.show(Component.java:1671) ~[na:1.8.0_121]
    at java.awt.Component.setVisible(Component.java:1623) ~[na:1.8.0_121]
    at javax.swing.JComponent.setVisible(JComponent.java:2644) ~[na:1.8.0_121]
    at javax.swing.JTabbedPane.fireStateChanged(JTabbedPane.java:394) ~[na:1.8.0_121]
    at javax.swing.JTabbedPane$ModelListener.stateChanged(JTabbedPane.java:270) ~[na:1.8.0_121]
    at javax.swing.DefaultSingleSelectionModel.fireStateChanged(DefaultSingleSelectionModel.java:132) ~[na:1.8.0_121]
    at javax.swing.DefaultSingleSelectionModel.setSelectedIndex(DefaultSingleSelectionModel.java:67) ~[na:1.8.0_121]
    at javax.swing.JTabbedPane.setSelectedIndexImpl(JTabbedPane.java:616) ~[na:1.8.0_121]
    at javax.swing.JTabbedPane.setSelectedIndex(JTabbedPane.java:591) ~[na:1.8.0_121]
    at javax.swing.plaf.basic.BasicTabbedPaneUI$Handler.mousePressed(BasicTabbedPaneUI.java:3647) ~[na:1.8.0_121]
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280) ~[na:1.8.0_121]
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:279) ~[na:1.8.0_121]
    at java.awt.Component.processMouseEvent(Component.java:6530) ~[na:1.8.0_121]
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) ~[na:1.8.0_121]
    at java.awt.Component.processEvent(Component.java:6298) ~[na:1.8.0_121]
    at java.awt.Container.processEvent(Container.java:2236) ~[na:1.8.0_121]
    at java.awt.Component.dispatchEventImpl(Component.java:4889) ~[na:1.8.0_121]
    at java.awt.Container.dispatchEventImpl(Container.java:2294) ~[na:1.8.0_121]
    at java.awt.Component.dispatchEvent(Component.java:4711) ~[na:1.8.0_121]
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) ~[na:1.8.0_121]
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4522) ~[na:1.8.0_121]
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) ~[na:1.8.0_121]
    at java.awt.Container.dispatchEventImpl(Container.java:2280) ~[na:1.8.0_121]
    at java.awt.Window.dispatchEventImpl(Window.java:2746) ~[na:1.8.0_121]
    at java.awt.Component.dispatchEvent(Component.java:4711) ~[na:1.8.0_121]
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) ~[na:1.8.0_121]
    at java.awt.EventQueue.access$500(EventQueue.java:97) ~[na:1.8.0_121]
    at java.awt.EventQueue$3.run(EventQueue.java:709) ~[na:1.8.0_121]
    at java.awt.EventQueue$3.run(EventQueue.java:703) ~[na:1.8.0_121]
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_121]
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) ~[na:1.8.0_121]
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) ~[na:1.8.0_121]
    at java.awt.EventQueue$4.run(EventQueue.java:731) ~[na:1.8.0_121]
    at java.awt.EventQueue$4.run(EventQueue.java:729) ~[na:1.8.0_121]
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_121]
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) ~[na:1.8.0_121]
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) ~[na:1.8.0_121]
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) [na:1.8.0_121]
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) [na:1.8.0_121]
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) [na:1.8.0_121]
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [na:1.8.0_121]
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) [na:1.8.0_121]
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) [na:1.8.0_121]
Caused by: java.lang.ClassNotFoundException: javafx.embed.swing.JFXPanel not found by protege.plugin.examples [30]
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574) ~[org.apache.felix.main.jar:na]
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79) ~[org.apache.felix.main.jar:na]
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018) ~[org.apache.felix.main.jar:na]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_121]
    ... 62 common frames omitted

Это мой файл pom. xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>edu.stanford.protege</groupId>
    <artifactId>protege.plugin.examples</artifactId>
    <version>2.0.0-SNAPSHOT</version>
    <packaging>bundle</packaging>

    <name>Protege Plugin Examples</name>
    <description>Example plug-ins for the Protege Desktop ontology editor, e.g., views, menu items, etc.</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <org.osgi.framework.system.packages.extra>
        javafx.animation,javafx.application,
        javafx.collections,
        javafx.embed.swing,
        javafx.geometry,
        javafx.scene,javafx.scene.layout,
        javafx.scene.transform,
        javax.swing,
        javax.swing.border,
        org.osgi.framework
    </org.osgi.framework.system.packages.extra>
    </properties>

    <dependencies>
        <dependency>
            <groupId>edu.stanford.protege</groupId>
            <artifactId>protege-editor-owl</artifactId>
            <version>5.0.0</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx -->
            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx</artifactId>
                <version>11</version>
                <type>pom</type>
            </dependency>

    </dependencies>

    <build>

        <resources>
            <resource>
                <!-- Use resource filtering to replace references to the artifactId in the plugin.xml file -->
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>3.0.0</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-Activator>org.protege.editor.owl.ProtegeOWL</Bundle-Activator>
                        <Bundle-ClassPath>.</Bundle-ClassPath>
                        <Bundle-SymbolicName>${project.artifactId};singleton:=true</Bundle-SymbolicName>
                        <Bundle-Vendor>The Protege Development Team</Bundle-Vendor>
                        <Embed-Dependency>javafx</Embed-Dependency>
                        <Embed-Transitive>true</Embed-Transitive>
                        <Export-Package>
                            org.protege.editor.owl.*;version="5.0.0", <!-- equivalent to [5.0.0,infinity) -->
                            com.sun.javafx, com.sun.javafx.animation, com.sun.java
                         fx.applet, com.sun.javafx.application, com.sun.javafx.beans, com.sun.
                         javafx.beans.event, com.sun.javafx.binding, com.sun.javafx.charts, co
                         m.sun.javafx.collections, com.sun.javafx.css, com.sun.javafx.css.conv
                         erters, com.sun.javafx.css.parser, com.sun.javafx.cursor, com.sun.jav
                         afx.effect, com.sun.javafx.embed, com.sun.javafx.event, com.sun.javaf
                         x.font, com.sun.javafx.font.coretext, com.sun.javafx.font.directwrite
                         , com.sun.javafx.font.freetype, com.sun.javafx.font.t2k, com.sun.java
                         fx.fxml, com.sun.javafx.fxml.builder, com.sun.javafx.fxml.expression,
                          com.sun.javafx.geom, com.sun.javafx.geom.transform, com.sun.javafx.g
                         eometry, com.sun.javafx.iio, com.sun.javafx.iio.bmp, com.sun.javafx.i
                         io.common, com.sun.javafx.iio.gif, com.sun.javafx.iio.ios, com.sun.ja
                         vafx.iio.jpeg, com.sun.javafx.iio.png, com.sun.javafx.image, com.sun.
                         javafx.image.impl, com.sun.javafx.jmx, com.sun.javafx.logging, com.su
                         n.javafx.media, com.sun.javafx.menu, com.sun.javafx.perf, com.sun.jav
                         afx.print, com.sun.javafx.property, com.sun.javafx.property.adapter, 
                         com.sun.javafx.robot, com.sun.javafx.robot.impl, com.sun.javafx.runti
                         me, com.sun.javafx.runtime.async, com.sun.javafx.runtime.eula, com.su
                         n.javafx.scene, com.sun.javafx.scene.control, com.sun.javafx.scene.co
                         ntrol.behavior, com.sun.javafx.scene.control.skin, com.sun.javafx.sce
                         ne.control.skin.caspian, com.sun.javafx.scene.control.skin.caspian.im
                         ages, com.sun.javafx.scene.control.skin.modena, com.sun.javafx.scene.
                         control.skin.resources, com.sun.javafx.scene.input, com.sun.javafx.sc
                         ene.layout, com.sun.javafx.scene.layout.region, com.sun.javafx.scene.
                         paint, com.sun.javafx.scene.shape, com.sun.javafx.scene.text, com.sun
                         .javafx.scene.transform, com.sun.javafx.scene.traversal, com.sun.java
                         fx.scene.web, com.sun.javafx.scene.web.behavior, com.sun.javafx.scene
                         .web.skin, com.sun.javafx.sg, com.sun.javafx.sg.prism, com.sun.javafx
                         .sg.prism.web, com.sun.javafx.stage, com.sun.javafx.text, com.sun.jav
                         afx.tk, com.sun.javafx.tk.quantum, com.sun.javafx.util, com.sun.javaf
                         x.webkit, com.sun.javafx.webkit.drt, com.sun.javafx.webkit.prism, com
                         .sun.javafx.webkit.prism.resources, com.sun.javafx.webkit.prism.theme
                         , com.sun.javafx.webkit.theme, javafx, javafx.animation, javafx.appli
                         cation, javafx.beans, javafx.beans.binding, javafx.beans.property, ja
                         vafx.beans.property.adapter, javafx.beans.value, javafx.collections, 
                         javafx.collections.transformation, javafx.concurrent, javafx.css, jav
                         afx.embed, javafx.embed.swing, javafx.event, javafx.fxml, javafx.geom
                         etry, javafx.print, javafx.scene, javafx.scene.canvas, javafx.scene.c
                         hart, javafx.scene.control, javafx.scene.control.cell, javafx.scene.e
                         ffect, javafx.scene.image, javafx.scene.input, javafx.scene.layout, j
                         avafx.scene.media, javafx.scene.paint, javafx.scene.shape, javafx.sce
                         ne.text, javafx.scene.transform, javafx.scene.web, javafx.stage, java
                         fx.util, javafx.util.converter,

                        </Export-Package>                
                    </instructions>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <pde>true</pde>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  • Java версия "1.8.0_241"
  • Apache Maven 3.6.3
  • Имя ОС: "windows 10", версия: "10.0", арка: "amd64", семейство: "windows"

1 Ответ

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

TO DO: из вашего pom. xml удалить зависимость org.openjfx, так как она не содержит пакет javafx / embed. отметьте этот репозиторий .

Используйте приведенную ниже зависимость для решения проблемы

JFXPanel - это компонент для встраивания содержимого JavaFX в приложения Swing.

В eclipse щелкните правой кнопкой мыши проект -> Свойства -> Библиотеки -> Добавить внешний файл jar и выберите файл jfxrt jar.

Расположение файла jfxrt.jar в Oracle Java 7 :

<JRE_HOME>/lib/jfxrt.jar

Расположение jfxrt.jar в Oracle Java 8:

<JRE_HOME>/lib/ext/jfxrt.jar

JRE_HOME будет зависеть от того, где вы установили Java.

package available

Плагин Maven для запуска приложений JavaFX 11+.

Плагин Gradle для запуска JavaFX 11+ приложений.

Надеюсь, это поможет.

...