Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有OSGi的JavaFX自定义事件_Java_Javafx_Osgi_Openjfx - Fatal编程技术网

带有OSGi的JavaFX自定义事件

带有OSGi的JavaFX自定义事件,java,javafx,osgi,openjfx,Java,Javafx,Osgi,Openjfx,我正在开发一个使用ApacheFelixOSGi框架的JavaFX应用程序。 我的问题是,当尝试注册自定义事件时,会引发如下所示的异常 org.apache.karaf.shell.support.MultiException: Error executing command on bundles: ... Caused by: java.lang.NoClassDefFoundError: Could not initialize class swt6.componentmanager

我正在开发一个使用ApacheFelixOSGi框架的JavaFX应用程序。 我的问题是,当尝试注册自定义事件时,会引发如下所示的异常

org.apache.karaf.shell.support.MultiException: Error executing command on bundles:
    ...
Caused by: java.lang.NoClassDefFoundError: Could not initialize class swt6.componentmanager.gui.event.RemoveSensorEvent
    at swt6.componentmanager.gui.ComponentManagerGui.createSensorView(ComponentManagerGui.java:170) ~[?:?]
    at swt6.componentmanager.gui.ComponentManagerGui.createSensorActuatorContainer(ComponentManagerGui.java:159) ~[?:?]
    at swt6.componentmanager.gui.ComponentManagerGui.createRootContainer(ComponentManagerGui.java:91) ~[?:?]
    at swt6.componentmanager.gui.ComponentManagerGui.lambda$start$0(ComponentManagerGui.java:62) ~[?:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
    at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) ~[?:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) ~[?:?]
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) ~[?:?]
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) ~[?:?]
    at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277) ~[?:?]
    ... 1 more
下面还显示了注册自定义事件的代码

private Node createSensorView() {
    var container = new VBox();
    container.getChildren().add(JavaFXUtil.createHeading("Sensors"));
    var sensorTable = new SensorsTable(this.sensors);
    sensorTable.addEventHandler(
            RemoveSensorEvent.REMOVE_SENSOR_EVENT_TYPE,
            this::onRemoveSensor
    );
    container.getChildren().add(sensorTable);
    return container;
}
下面还说明了类
removesenservent
的代码

package swt6.componentmanager.gui.event;

import javafx.event.Event;
import javafx.event.EventType;
import swt6.sensor.Sensor;

public class RemoveSensorEvent extends Event {
    public static final EventType<RemoveSensorEvent> REMOVE_SENSOR_EVENT_TYPE =
            new EventType<>(Event.ANY, "REMOVE_SENSOR");

    private final Sensor sensor;

    public RemoveSensorEvent(Sensor sensor) {
        super(REMOVE_SENSOR_EVENT_TYPE);

        this.sensor = sensor;
    }

    public Sensor getSensor() {
        return this.sensor;
    }
}
由于
removesenservent
是包
swt6.componentmanager.gui.event
的一部分,该包与调用它的代码位于同一个包中(
swt6.componentmanager.gui.ComponentManagerGui.java
),因此加载类定义时应该不会出现任何问题;例如,可以从
swt6.componentmanager.gui.component
swt6.componentmanager.gui.viewmodel
访问位于
swt6.componentmanager.gui
中的类。这与JavaFX试图使用反射访问
removesenservent
有关吗

swt6.componentmanager.gui
    ComponentManagerGui.java
    swt6.componentmanager.gui.event
        RemoveSensorEvent.java
    swt6.componentmanager.gui.component
    swt6.componentmanager.gui.viewmodel