I'm trying to run a Java application with -Dsun.java2d.dpiaware=false
argument but nothing happens.
I expect to have a blurred UI but with normal size of icons and fonts, it seems that this flag does not work.
I'm using JDK 1.8.0_45 on Windows 8.1.
I found this bug https://bugs.openjdk.java.net/browse/JDK-8080153 but I don't understand how to workaround it.
Choose Tools > Options to open the Options dialog. In the Options dialog, choose Windows Forms Designer > General, and set DPI Scaling Notifications to False.
Desktop applications that are system DPI aware typically receive the DPI of the primary connected monitor as of the time of user sign-in. During initialization, they lay out their UI appropriately (sizing controls, choosing font sizes, loading assets, etc.) using that System DPI value.
To make your application dpi-aware, you must cancel automatic dpi scaling, and then adjust user interface elements to scale appropriately to the system dpi.
Create a windows regedit new DWORD
Create the two .manifest file (JDK)
Create the two .manifest file (JRE)
Restart your java application.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"> </assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"> </assemblyIdentity> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware> </asmv3:windowsSettings> </asmv3:application> </assembly>
This fix can be used for any program, not only Java.
If you need to fix the DPI for a JNLP application launcher, you have to add the following key to the resources section inside the .jnlp file :
<property name="sun.java2d.dpiaware" value="false"/>
After Upgrading Windows (e.g from win10 to win10 1607), you should apply this fix again if it doesn't work anymore.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With