Я хотел спросить, есть ли у кого-нибудь проблемы с использованием плагина Gluon Charm Down для ориентации экрана для IOS?Null Pointer при чтении ориентации экрана от Gluon Charm Down
JFXMobile Плагин: org.javafxports:jfxmobile-plugin:1.3.2
Charm Версия: com.gluonhq:charm:4.2.0
downConfig {
version = '3.1.0'
plugins 'display', 'lifecycle', 'statusbar', 'storage', 'orientation'
}
Когда я пытаюсь вызвать его, как это:
Services.get(OrientationService.class).ifPresent(service -> {
onOrientationChange(service.orientationProperty(), null, service.getOrientation().orElse(Orientation.VERTICAL));
service.orientationProperty().addListener(this::onOrientationChange);
});
я получаю исключение на консоль:
Exception in Preloader start method
2017-02-06 10:43:37.104693 MyApp[447:282589] Orientation is Unknown
QuantumRenderer: shutdown
java.lang.RuntimeException: Exception in Preloader start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$156(LauncherImpl.java)
at com.sun.javafx.application.LauncherImpl$$Lambda$2.run(Unknown Source)
at java.lang.Thread.run(Thread.java)
Caused by: java.lang.NullPointerException
at com.gluonhq.charm.down.plugins.ios.IOSOrientationService.getOrientation(IOSOrientationService.java)
at my.app.Preloader.lambda$start$24(Preloader.java)
at my.app.Preloader$$Lambda$3.accept(Unknown Source)
at java.util.Optional.ifPresent(Optional.java)
at my.app.Preloader.start(Preloader.java)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java)
at com.sun.javafx.application.LauncherImpl$$Lambda$7.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java)
at com.sun.javafx.application.PlatformImpl$$Lambda$7.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java)
at com.sun.javafx.application.PlatformImpl$$Lambda$19.run(Unknown Source)
at java.security.AccessController.doPrivileged(AccessController.java)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java)
at com.sun.javafx.application.PlatformImpl$$Lambda$6.run(Unknown Source)
at org.robovm.apple.uikit.UIApplication.main(UIApplication.java)
at org.robovm.apple.uikit.UIApplication.main(UIApplication.java)
at org.javafxports.jfxmobile.ios.BasicLauncher.main(BasicLauncher.java)
Глядя на code, я предполагаю, что может быть только одна причина, по этому вопросу:
@Override
public final Optional<Orientation> getOrientation() {
switch (orientationText) {
case "Portrait":
case "PortraitUpsideDown":
return Optional.of(Orientation.VERTICAL);
case "LandscapeLeft":
case "LandscapeRight":
return Optional.of(Orientation.HORIZONTAL);
case "Unknown":
default:
return Optional.empty();
}
}
Мое предположение, что orientationText
является null
и, следовательно, он выходит из строя.
Линия 2017-02-06 10:43:37.104693 MyApp[447:282589] Orientation is Unknown
вносит свой вклад в это, я думаю.
Это ошибка? Есть ли способ обойти это? (Например, есть некоторый набор вверх необходимо на IOS, как система разрешения на Android?)
Заранее спасибо и уважением,
Daniel
#edit:onOrientationChange
метод не очень сложно:
private void onOrientationChange(ObservableValue<? extends Orientation> obs, Orientation o, Orientation n) {
if (n == null || splashPane == null)
return;
splashPane.pseudoClassStateChanged(vertical, Orientation.VERTICAL == n);
splashPane.pseudoClassStateChanged(horizontal, Orientation.HORIZONTAL == n);
}
Поэтому, я думаю, этого было бы достаточно, чтобы обновить код до sth. как этот
Services.get(OrientationService.class).ifPresent(service -> {
service.orientationProperty() AddListener (это :: onOrientationChange). });
(он работает на Android, так что я мог бы альтернативно проверить платформу и сделать это только на не-IOS или около того)
Учитывая, что журнал дает не нулевую ориентацию, я не думаю, что значение 'orientText' равно null. Можете ли вы изменить свой обработчик событий? Не используйте 'onOrientationChange' пока. Просто распечатайте новое значение ориентации: 'service.orientationProperty(). AddListener ((obs, ov, nv) -> System.out.println (" O: "+ nv));' и посмотреть, не сработает ли он. –
Я обновил свой вопрос (см. Его нижнюю часть) с содержимым 'onOrientationChange' - но да, я могу попробовать это. Вы дадите результат после обеда, хорошо? – dzim