[External] : Re: What causes java.lang.InternalError: platform encoding not initialized ?
Andy Herrick
andy.herrick at oracle.com
Tue Sep 21 15:35:03 UTC 2021
I filed: JDK-8274087: Windows DLL path not set correctly.
for this, and will work on a fix for JDK18 and backport to JDK17.0.2.
/Andy
On 9/21/2021 10:54 AM, Andy Herrick wrote:
> I found the problem in
> open/src/jdk.jpackage/windows/native/applauncher/WinLauncher.cpp
>
> we call SetDllDirectory() with the path to the bin dir in the default
> runtime directory, not the actual runtime directory.
>
> since on Windows we never use other than the default runtime location
> - we had not seen a problem, but is bug I will file and fix.
>
> Thanks.
>
> /Andy
>
> On 9/21/2021 10:17 AM, Scott Palmer wrote:
>> This is on Windows 10 Pro. using JDK 17 for jpackage and I'm pretty
>> sure for jimage (though the image was made shortly after 17 GA and
>> is being reused)..
>>
>> There are no libraries directly in $APPDIR, though there are plenty
>> in other sibling folders to the 'app' folder (in addition to those in
>> app\libs)
>>
>> I changed app.runtime to point to the (relative) path without the
>> $APPDIR\.. - same problem. Tried a absolute path, same problem.
>>
>> The exact same runtime folder that was failing for me was simply
>> copied to the default location to make it work. It works if I leave
>> app.runtime out of the .cfg file, or if I point to $APPDIR\..\runtime
>>
>> I did some more experiments and found that if I just rename the
>> 'runtime' folder to 'jre', but leave it at the same depth then the
>> problem appears.
>>
>> I suspected there must be some hardcoded reference to the 'runtime'
>> folder in the app launcher. However, if I have two copies of the
>> runtime, one at the default location, and use app.runtime to point to
>> the other copy it still fails. (i.e. if it is referencing some
>> library from the default location it doesn't help.. I thought it
>> might, being that it is all in the same process.)
>>
>> The application is complex. It has a plugin mechanism that uses an
>> Agent and the Instrument class to augment the classpath at runtime.
>>
>> (Older versions of the plugin mechanism used to hack the System
>> classloader on JDK 8 and switching to an Agent was the fastest way to
>> make it work on later versions in a supported manner. It likely
>> should be using custom classloaders, but classloading issues got
>> messy when I looked into that way back when we started.)
>>
>> I will try to find time later this week to isolate a test case that
>> can reproduce it. For now I can work around the issue by putting the
>> runtime back to the default location for this case. This is a special
>> case of an application that actually includes the JRE itself as one
>> of the plugins so we can upgrade the JRE after the initial deployment
>> or run different jobs with different JREs. I was trying to make a
>> smaller tool/demo that used the JRE from where it would be in our
>> "plugin" folder.
>>
>> Regards,
>>
>> Scott
>>
>> On Tue, Sep 21, 2021 at 9:22 AM Andy Herrick <andy.herrick at oracle.com
>> <mailto:andy.herrick at oracle.com>> wrote:
>>
>> I don't see anything wrong with this offhand. the runtime should
>> be able
>> to be anywhere if the cfg files "app.runtime" line points to it.
>>
>> Is this on windows ? Is the the released JDK17 used both for the
>> jlinked
>> runtime and the jpackage tool ?
>>
>> Are there any libraries in $APPDIR (which is added to the $PATH env
>> variable on windows) which could be interfering with encoding
>> initialization ?
>>
>> Can you try the following experiment:
>>
>> manually edit the cfg file line:
>>
>> app.runtime=$APPDIR\..\my_own_folder\where_the_jre_is_deeper\jre
>>
>> to contain the canonical path to
>> ...\my_own_folder\where_the_jre_is_deeper\jre
>>
>> and try again ?
>>
>>
>> /Andy
>>
>> On 9/20/2021 5:37 PM, Scott Palmer wrote:
>> > This is likely not the right place to ask this (sorry).. but I'm
>> trying to
>> > get info to write a bug report and want to make sure I'm not doing
>> > something stupid first.
>> >
>> > I've created a JRE image from JDK 17 with jlink. I've made an
>> > application image with jpackage. I've moved the default
>> location of the
>> > runtime in the application image and modified the launcher .cfg
>> file
>> > accordingly by adding a line to the [Application] section
>> >
>> > app.runtime=$APPDIR\..\my_own_folder\where_the_jre_is_deeper\jre
>> >
>> > My application launches. It shows a JavaFX GUI. It does a
>> bunch of stuff
>> > that "works", but then one thread fails with this exception:
>> >
>> > Exception in thread "Reader-BG-1" java.lang.InternalError:
>> platform
>> > encoding not initialized
>> > at java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.Inet6AddressImpl.lookupAllHostAddr(Native
>> > Method)
>> > at
>> > java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:933)
>> > at
>> > java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.InetAddress.getAddressesFromNameService(InetAddress.java:1519)
>> > at
>> > java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.InetAddress$NameServiceAddresses.get(InetAddress.java:852)
>> > at
>> > java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.InetAddress.getAllByName0(InetAddress.java:1509)
>> > at
>> > java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.InetAddress.getAllByName(InetAddress.java:1367)
>> > at
>> > java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.InetAddress.getAllByName(InetAddress.java:1301)
>> > at java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.InetAddress.getByName(InetAddress.java:1251)
>> > at
>> > java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.InetSocketAddress.<init>(InetSocketAddress.java:229)
>> > at java.base/sun.net
>> <https://urldefense.com/v3/__http://sun.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPmjoCOyeg$>.NetworkClient.doConnect(NetworkClient.java:178)
>> > at
>> >
>> java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:498)
>> > at
>> >
>> java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:603)
>> > at
>> >
>> java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:266)
>> > at
>> >
>> java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:380)
>> > at
>> >
>> java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:189)
>> > at
>> >
>> java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1242)
>> > at
>> >
>> java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1128)
>> > at
>> >
>> java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:175)
>> > at
>> >
>> java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1665)
>> > at
>> >
>> java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
>> > at
>> > java.base/java.net
>> <https://urldefense.com/v3/__http://java.net__;!!ACWV5N9M2RV99hQ!cK2V22iJze6hwFbWIzZKgRder-bdAm7ZPMElasps8WXPWPT4Bp6Q1eXLXPnKuOQcpQ$>.HttpURLConnection.getResponseCode(HttpURLConnection.java:529)
>> > at
>> >
>> java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:308)
>> >
>> > If I keep the runtime in $APPDIR\runtime, things don't fail in
>> this way.
>> >
>> > Smells like a bug in the app launcher to me.. but maybe it's in
>> the runtime?
>> >
>> > Any assistance would be appreciated (including telling me where
>> I should go
>> > to ask this, if this list isn't appropriate).
>> >
>> > Thanks,
>> >
>> > Scott
>>
More information about the core-libs-dev
mailing list