[External] : Re: Windows 11: Notifications vanishes after few seconds.

Aleksei Ivanov alexey.ivanov at oracle.com
Wed Jan 17 18:08:22 UTC 2024


Hi Davide,

On 2024-01-08 21:05, Davide Perini wrote:
> Thanks for the explanation Aleksei
> but can you explain me what is the OpenJDK direction please?
>
> Suppose that you have a feature like this one, a simple notifications.
> Java worked well with Windows notifications until Win10,
> then Microsoft changed the APIs for notifications in Win11.

It is a change by Microsoft, JDK has no control over how Windows treats 
notifications. These notifications were introduced in Windows XP and 
were meant to provide a quick status update, the notifications were not 
preserved, therefore apps should not rely on the notifications as the 
only means to communicate status to users.

Windows 10 allowed notifications displayed with Shell_NotifyIcon to be 
preserved in the notification centre.

With Windows 11, such notifications are again temporary as they were 
before Windows 10 and are gone after a short timeout.

The API that Java uses to display notifications hasn't changed, yet the 
way Windows treats these notifications has changed.

> Isn't OpenJDK supposed to adapt to the new Windows APIs?

Updating to newer APIs isn't free.

> Does OpenJDK supports Windows 11 or not?

JDK supports Windows 11. At the same time, JDK can still have bugs.

> It's a little "weird" to close an issue by saying that Java uses the 
> same way to do the same thing since Windows 95
> and that it's a Microsoft problem if they changed the way to send 
> notifications to the OS.
>
> Java should support Microsoft Windows, it isn't Microsoft Windows that 
> should support Java,
> isn't it?

I demonstrated that it's not a bug in JDK, it's the way notifications 
from Win32 API are handled in Windows 11.

Any application that uses Win32 API, Shell_NotifyIcon in particular, is 
affected. It is not limited to Java. A C++ app has exactly the same 
behaviour; an app developed in another language or framework which uses 
Shell_NotifyIcon under the hood is affected too.

-----

I'd like to remind you that this mailing list is where you contribute 
fixes for OpenJDK. You can contact Oracle for support.


Regards,
Alexey

> Other languages adapted their APIs for the new notifications system, 
> like everyone should expect from a modern language,
> after 2 years from the release of Win 11,
> Oracle says that it worked since Windows 95, so it is ok to have a 
> broken API in JDK because it worked before, they are the ones who 
> broke it (Microsoft).
>
> Does Java offers a correct way to send Notifications in Win10? Answer: Yes
> Does Java offers a correct way to send Notifications in Win11? Answer: No
> Does other languages offers a correct way to send Notifications in 
> Win11? Answer: Yes
> Does current JDK APIs works as expected in Win11?
> Answer: No because JDK uses an old API born with Win95 (30 years ago + 
> or -) with a new OS born in 2021, this results in an unexcpected 
> behaviour that doesn't work as supposed initially by the API.
>
> In the bug report you wrote:
> "I can't see what Java can do to change the behaviour."
>
> The answer is:
> "By implementing the correct API for the correct OS".
>
>
> Java is currently not able to correctly send a Notification in Windows 11.
>
>
> I see a bug there, if you don't see it,
> I'm pretty worried of the new JDK direction.
>
> Thanks
> Davide
>
>
> Il 08/01/2024 20:55, Aleksei Ivanov ha scritto:
>> On 2024-01-08 19:30, Davide Perini wrote:
>>> Thanks for the Answer Aleksei,
>>> I have a lot of Windows apps that uses notifications without problems.
>>>
>>> even a simple python program like this works correctly.
>>> from win11toastimport toast
>>>
>>> toast('Hello','Click to run python script')
>>
>> Python could use newer WinRT APIs [6], in particular 
>> ToastNotification class [7] which provide richer interface for the 
>> toast notifications. The package name ‘toast’ hints it uses the newer 
>> APIs.
>>
>>> is it possible that Microsoft changed the way how to create 
>>> Notifications in Windows 11 and Java still uses the way it worked in 
>>> Windows 7?
>>
>> Perhaps, Microsoft changed how they handle notifications in Windows 
>> 11. In Windows 10, the notifications created with a Java app remain 
>> in Action / Notification centre.
>>
>> Java uses Shell_NotifyIcon [8] function that has been available since 
>> Windows 95.
>>
>> -- 
>> Regards,
>> Alexey
>>
>> [6] https://learn.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/
>> [7] 
>> https://learn.microsoft.com/en-us/uwp/api/windows.ui.notifications.toastnotification?view=winrt-22621
>> [8] 
>> https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shell_notifyiconw
>>
>>>
>>> Thanks
>>> Davide
>>>
>>>
>>>
>>> Il 08/01/2024 17:59, Aleksei Ivanov ha scritto:
>>>> Hi Davide,
>>>>
>>>> The bug that you reported has been moved to JDK project in JBS, you 
>>>> can view it as JDK-8315647 [1]. You should've received a link to it.
>>>>
>>>>> Is there a way to workaround this JDK bug?
>>>>> I opened a bug report months ago but no one answered. 
>>>>
>>>> What kind of answer did you expect to receive?
>>>>
>>>> You already asked this question on this mailing list in August [2]. 
>>>> I replied to your question [3]. Nothing has changed since August. 
>>>> It is not a bug in Java because a native Win32 app behaves the same 
>>>> way.
>>>>
>>>> I compiled and tested the sample [4], it behaves in Windows 11 as 
>>>> Java does: the displayed balloon notification does not go to 
>>>> notification centre. However, if I open notification centre while 
>>>> the balloon is displayed, it remains there. If I disable "Show 
>>>> notification banners" and leave "Show notifications in notification 
>>>> centre" enabled, the balloon goes directly to notification centre 
>>>> without displaying a banner.
>>>>
>>>> You can compile and test the sample too:
>>>>
>>>> git clone --filter=blob:none --sparse 
>>>> https://github.com/microsoft/Windows-classic-samples.git 
>>>> windows-samples
>>>> cd windows-samples
>>>> git sparse-checkout add 
>>>> Samples/Win7Samples/winui/shell/appshellintegration/NotificationIcon
>>>>
>>>> Navigate to the NotificationIcon folder and open 
>>>> NotificationIcon.sln in Visual Studio to compile and run it.
>>>>
>>>> If required, I can attach the compiled version of the application.
>>>>
>>>>
>>>> I have closed JDK-8315647 as duplicate of JDK-8310352 [5].
>>>>
>>>
>>
>



More information about the client-libs-dev mailing list