Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java disable dpi-aware not working

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.

like image 559
blow Avatar asked May 31 '15 08:05

blow


People also ask

How do I disable DPI awareness?

Choose Tools > Options to open the Options dialog. In the Options dialog, choose Windows Forms Designer > General, and set DPI Scaling Notifications to False.

What is DPI aware?

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.

How do I make my application DPI aware?

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.


1 Answers

Fix for Windows, follow these steps:

  • Create a windows regedit new DWORD

    1. Press Windows Button + R, type “regedit”, and then click OK.
    2. Navigate to the following registry subkey:
      HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows > CurrentVersion > SideBySide
    3. Right-click, select NEW > DWORD (32 bit) Value
    4. Type PreferExternalManifest, and then press ENTER.
    5. Right-click PreferExternalManifest, and then click Modify.
    6. Enter Value Data 1 and select Decimal.
    7. Click OK.
  • Create the two .manifest file (JDK)

    1. Go to your java JDK installation folder and open the bin directory
    2. Create a first file called java.exe.manifest (add the code at the end of this post).
    3. Create a second one called javaw.exe.manifest (add the code at the end of this post).
  • Create the two .manifest file (JRE)

    1. Go to your java JRE installation folder and open the bin directory
    2. Create a first file called java.exe.manifest (add the code at the end of this post).
    3. Create a second one called javaw.exe.manifest (add the code at the end of this post).
  • Restart your java application.

Code to Paste into the .manifest files

<?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.

** Afer Updating Java, you should copy&paste .manifest files into new Java's directory.

like image 181
t0re199 Avatar answered Sep 18 '22 16:09

t0re199