我正在开发一个使用 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();
}
classAddSensorEvent
也EventType
通过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 模块系统的应用程序的一个端口,在使用模块系统时可以正常工作。
我尝试关注这个、这个和这个问题,但提供的解决方案都不适合我。
谢谢您的帮助!