Can't restart my app with the latest JDK, regression.

Davide Perini perini.davide at dpsoftware.org
Mon Feb 5 10:01:45 UTC 2024


Hi John,
thanks for the answer.

The problem happen even with other JDKs like the Azul, corretto...

The weird thing is that to reproduce it you need to package the program 
with jpackage and then execute the program using the generated exe.

This is the only code needed to reproduce the issue.

public static void main(String... args) throws IOException {
         String[] cmdToRunUsingArgs = {"cmd.exe", "/C", "C:\\Program Files\\Notepad++\\notepad++.exe"};
         Runtime.getRuntime().exec(cmdToRunUsingArgs);
         Executors.newSingleThreadScheduledExecutor().schedule(() -> {
             System.exit(0);
         }, 30, TimeUnit.SECONDS);
     }


It's very weird because the problem does not happen with the previous 
minor version of the JDK21, the JDK 21.01_12.

I'm pretty sure now that this isn't related to JavaFX since the problem 
can be reproduced even without JavaFX.

Problem must be in the JPackage.

Thanks
Davide



Il 04/02/2024 18:17, John Hendrikx ha scritto:
>
> Hi,
>
> Does that Temurin build contain JavaFX, or is it just a new Temurin 
> build?  Did you change anything else besides the JDK used?  You could 
> try other JDK's (openjdk, corretto, etc) as well.
>
> Is there anything being logged that may indicate what went wrong?
>
> That all said, it seems really unlikely this is related to JavaFX.
>
> If System.exit(0) is killing both the new and old application, then it 
> wasn't really spawned independently, so you can look into that (you 
> could put a delay there, and see with a tool like `top` or Task 
> Manager says, and see whether the restarted app is a child process or 
> not).
>
> It's also possible the problem is in the tools/settings used to create 
> the ".exe", so see if you changed anything there.
>
> For more info, tips or other ways of doing restarts: 
> https://stackoverflow.com/questions/4159802/how-can-i-restart-a-java-application
>
> --John
>
>
> On 04/02/2024 02:49, Davide Perini wrote:
>> Hi there,
>> my JavaFX 21.0.2 app experienced a very weird regression when 
>> switching from Temurin
>> OpenJDK21U-jdk_x64_windows_hotspot_21.0.1_12
>> to
>> OpenJDK21U-jdk_x64_windows_hotspot_21.0.2_13
>>
>> I use this method to restart my app.
>>
>> public void restart() {
>>      // path to my exe app plus one string argument
>>      String[] cmdToRunUsingArgs = {"C:\Users\sblantipodi\AppData\Local\Firefly Luciferin\Firefly 
>> Luciferin.exe","string argument"};
>>      try {
>>          Runtime.getRuntime().exec(cmdToRunUsingArgs);
>>      }catch (SecurityException | IOException e) {
>>          log.error(e.getMessage());
>>      }
>>      javafx.application.Platform.exit();
>>      System.exit(0);
>> }
>>
>> It worked well since years until JDK 21.0.2_13.
>> If I revert back to 21.0.1_12 it works well.
>>
>> That method should start a new instance of the app, and close the 
>> "old instance".
>>
>> With JDK 21.0.2_13, it closed the running instance but does not open 
>> a new instance.
>>
>> I don't know if open a bugreport to JDK but before opening the bug 
>> report I would like to ask you if that method to restart the app is 
>> correct or if you think that I can use a better way.
>>
>> Thanks
>> Davide
>>
>>
>>
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20240205/8493ad46/attachment.htm>


More information about the openjfx-dev mailing list