RFR 9 7131356 : (props) "No Java runtime present, requesting install" when creating VM from JNI [macosx]
Alex Strange
astrange at apple.com
Wed Jun 22 22:10:52 UTC 2016
> On Jun 20, 2016, at 3:44 PM, Brent Christian <brent.christian at oracle.com> wrote:
>
>
> Alex - thanks for your response. More below...
>
> On 6/13/16 4:51 PM, Alex Strange wrote:
>>> 2. In "setupMacOSXLocale" we simply drop the call to
>>> "JRSSetDefaultLocalization" as it appears to be a NOP. According to
>>> Apple, that API sets up native bundle locale, so that any access to
>>> native Cocoa UI (like FileOpenChooser) uses localized strings.
>>> Testing shows that this does not seem to work even in Apple's own
>>> JDK (ie. JDK 6), so dropping the call to this SPI here does not
>>> result in a regression. An issue was filed to investigate further
>>> (8024279, a dup of 8019464) which has since been closed as, "Not an
>>> Issue".
>>
>> This was added a very long time ago so that 'java -jar x.jar' would
>> show properly localized menus in the menubar, instead of English
>> menus, on a non-English system. It might no longer be a problem.
>
> OK, thanks.
>
> 'java -jar x.jar' behavior is unchanged with this patch. (From the bug report, it hasn't worked since JDK 7).
That's unfortunate, since it probably means I broke it back then. Sorry about that.
>
>>> 3. In "setOSNameAndVersion", re-implement JRSCopyOSVersion using
>>> [NSProcessInfo operatingSystemVersion]. (Use of JRSCopyOSName was
>>> already removed by 7178922).
>>
>> You shouldn't need to use objc_msgSend_stret here. If you're not
>> getting a warning when you use @selector in the line above, you
>> should just be able to call -operationgSystemVersion directly inside
>> the if.
>>
>> If you are getting a warning, it'd be best to declare the selector
>> yourself somewhere higher up:
>>
>> typedef struct {
>> NSInteger majorVersion;
>> NSInteger minorVersion;
>> NSInteger patchVersion;
>> } OSVerStruct;
>>
>> @interface NSProcessInfo ()
>> - (OSVerStruct)operatingSystemVersion;
>> @end
>
> Thanks - this works for building w/ the 10.9 SDK (the officially supported Mac SDK for building JDK).
>
> But I believe people also build w/ the 10.10 SDK (I've not tried it myself). Won't this cause problems, since NSProcessInfo already has "operatingSystemVersion", and it returns an NSOperatingSystemVersion, not an OSVerStruct ?
>
> I'd prefer something that can build on SDK 10.9 and 10.10, etc. Once the official build moves to 10.10/later, objc_msgSend() can be removed and we can use [NSProcessInfo operatingSystemVersion] directly.
Ah, I see. Your way is correct, then. There might be a way to #ifdef it out (not sure), but it's not worth it.
>
> Thanks,
> -Brent
More information about the core-libs-dev
mailing list