Если я позвоню следующий метод RoboVM с любым ненулевым аргумент:Действительно странно NullPointerException в RoboVM
public static void runOnUiThread(final Runnable runnable) {
System.out.println("Inside runOnUiThread():");
System.out.println(" Null-check: "+(runnable==null));
NSOperation operation = new NSOperation() {
@Override
public void main() {
System.out.println("Inside main():");
System.out.println(" Null-check: "+(runnable==null));
runnable.run(); // NullPointerException here?!? How???
System.out.println(" main() completed");
}
};
NSOperationQueue.getMainQueue().addOperation(operation);
}
выводит:
Inside runOnUiThread():
Null-check: false
Inside main():
Null-check: true
java.lang.NullPointerException
at RoboVMTools$1.main(RoboVMTools.java)
at org.robovm.apple.foundation.NSOperation.$cb$main(NSOperation.java)
at org.robovm.apple.uikit.UIApplication.main(Native Method)
at org.robovm.apple.uikit.UIApplication.main(UIApplication.java)
at Main.main(Main.java)
Что на земле происходит ??? И что еще более важно, как я могу обойти это?
- Я пробовал добавить
operation.addStrongRef(runnable);
прямо сейчасNSOperationQueue...
. Нет разницы. - Я также попытался переместить анонимный внутренний класс в свой класс, который имеет поле
private final
для хранения runnable, который передается в его конструктор. Тот же результат.
Я просто пропустил что-то совершенно очевидное ???
Это имеет смысл. Спасибо. +1 для 'addOperation (Runnable)'. Я полностью пропустил это! :) Кстати: RoboVM абсолютно потрясающий! Я очень рад, что мне не нужно иметь дело с Objective-C (yuck!)! Вы, ребята, потрясающие! Спасибо огромное! Лучший день в моей жизни будет, когда есть RoboVM-версия, которая может создавать приложения для Windows Phone! ;) Было бы трудно, учитывая инфраструктуру, которую у вас уже есть? Или вы уже работаете над этим? :) –
Я рад слышать, что вам нравится RoboVM! Нет, мы не работаем над поддержкой Windows Phone. Недавно MS анонсировала [Project Astoria] (https://dev.windows.com/en-us/uwp-bridges/project-astoria), которая приведет Android-приложения к Windows Phone. Как только это произойдет, перенос RoboVM на Windows Phone не будет иметь большого смысла. Было бы интересной задачей, хотя ... :-) – ntherning