void () { Foundation.NSAutoreleasePool pool = new Foundation.NSAutoreleasePool(); ID delegateClass = Foundation.allocateObjcClassPair(Foundation.getObjcClass("NSObject"), "NSScrollerChangesObserver"); if (!ID.NIL.equals(delegateClass)) { // This static initializer might be called more than once (with different class loaders). In that case NSScrollerChangesObserver // already exists. if (!Foundation.addMethod(delegateClass, Foundation.createSelector("handleScrollerStyleChanged:"), APPEARANCE_CALLBACK, "v@")) { throw new RuntimeException("Cannot add observer method"); } if (!Foundation.addMethod(delegateClass, Foundation.createSelector("handleBehaviorChanged:"), BEHAVIOR_CALLBACK, "v@")) { throw new RuntimeException("Cannot add observer method"); } Foundation.registerObjcClassPair(delegateClass); } ID delegate = Foundation.invoke("NSScrollerChangesObserver", "new"); try { ID center; center = Foundation.invoke("NSNotificationCenter", "defaultCenter"); Foundation.invoke(center, "addObserver:selector:name:object:", delegate, Foundation.createSelector("handleScrollerStyleChanged:"), Foundation.nsString("NSPreferredScrollerStyleDidChangeNotification"), ID.NIL ); center = Foundation.invoke("NSDistributedNotificationCenter", "defaultCenter"); Foundation.invoke(center, "addObserver:selector:name:object:", delegate, Foundation.createSelector("handleBehaviorChanged:"), Foundation.nsString("AppleNoRedisplayAppearancePreferenceChanged"), ID.NIL, 2 // NSNotificationSuspensionBehaviorCoalesce ); } finally { pool.drain(); } }