1

我正在开发一个使用 Apache Felix OSGi 框架的 JavaFX 应用程序。我在触发自定义事件时遇到问题。每当我尝试触发自定义事件时,java.lang.IllegalArgumentException: EventType "ADD_SENSOR" with parent "EVENT" already exists都会引发异常(堆栈跟踪如下所示)。

Caused by: java.lang.IllegalArgumentException: EventType "ADD_SENSOR"with parent "EVENT" already exists
    at javafx.event.EventType.register(EventType.java:186)
    at javafx.event.EventType.<init>(EventType.java:128)
    at swt6.componentmanager.gui.event.AddSensorEvent.<clinit>(AddSensorEvent.java:8)

触发事件的代码如下所示。

private void onAddSensor(ActionEvent event) {
    AddSensorEvent addSensorEvent = new AddSensorEvent(
            this.typeComboBox.getValue(),
            this.nameInput.getText(),
            this.descriptionInput.getText()
    );
    this.addButton.fireEvent(addSensorEvent);

    // close the window
    ((Stage) this.getScene().getWindow()).close();
}

classAddSensorEventEventType通过public static final字段管理实例,如下所示。

public class AddSensorEvent extends Event {
    public static final EventType<AddSensorEvent> ADD_SENSOR_EVENT_TYPE =
            new EventType<>(EventType.ROOT, "ADD_SENSOR");

    private final SensorFactory sensorFactory;
    private final String sensorName;
    private final String sensorDescription;

    public AddSensorEvent(SensorFactory sensorFactory, String sensorName, String sensorDescription) {
        super(ADD_SENSOR_EVENT_TYPE);

        this.sensorFactory = sensorFactory;
        this.sensorName = sensorName;
        this.sensorDescription = sensorDescription;
    }

    public SensorFactory getSensorFactory() {
        return this.sensorFactory;
    }

    public String getSensorName() {
        return this.sensorName;
    }

    public String getSensorDescription() {
        return this.sensorDescription;
    }
}

该应用程序是使用Java 9 中引入的Java 模块系统的应用程序的一个端口,在使用模块系统时可以正常工作。

我尝试关注这个这个这个问题,但提供的解决方案都不适合我。

谢谢您的帮助!

4

0 回答 0