用于AWT / Swing的Java JDK 1.7中的Apple Retina显示支持

我刚才意识到Java JDK 1.7下的AWT / Swing(从JDK 7u15开始)不支持Apple Macbook Pros上的Retina显示。 例如,Netbeans几乎无法忍受在Retina显示器上运行并使用JDK 1.7超过几分钟。

这在StackExchange问​​题中有所解决,并引用了一个特定的post:

Apple的Java 6 JRE将支持HiDPI,但Oracle Java 7 JRE目前不支持它。 它也不适用于Java 8的最新开发版。在Retinia MacBook上,Swing和JavaFX应用程序模糊不清。 这就是IntelliJ仍在Java 6下运行的原因。

我的问题比上述线程的OP所要求的更具体。

我的雇主不到一个月就在其所有应用程序中使用Swing。 由于多种原因,我们有兴趣从Java 6迁移到Java 7.在过去的几天里,另一位开发人员(在Windows上)将我们的平台移到Java 7.当我运行视网膜Macbook Pro时,我注意到了当我拉出代码的最新稳定分支时的问题。

我是Java的新手,在社区中有不到一年的经验,因此我的问题是:Java社区是否会对此问题做出相应的响应,或者在Swing之前是否会出现大量延迟(几个月到一年或更长时间)在Java 7中与Apple Retina显示器兼容吗?

Java 7u40 Early Access现在支持HiDPI(Retina)显示, 如此更改日志所示。 因此,视网膜支持现在可用于:

  • Java 6
  • Java 7u40ea或更高版本
  • Java 8

上个月我也对同一个主题感兴趣,过了一段时间我在网上发现没人能完全回答这个问题。

在Oracle有一个开放的bug: http : //bugs.sun.com/view_bug.do?video_id = 8000629

根据它应该修复Java 1.8。 但我担心的是,我不确定它是否也将被修复为Swing或仅用于JavaFX。 我在某地读到已经修复了JavaFX(但不确定是否正式),这并没有解决Swing的问题。

回答简短,经过几天在互联网上搜索不幸我找不到答案…

此致,Lubos

从1.7.0_40ea开始,Oracle完全支持Retina。 但是,Retina缺乏API。 例如,在Apple JDK中不支持HiDPIScaledImages。 您可以在http://culenkov.com/2013/06/23/retina-support-in-oracle-jdk-1-7/找到有关在Oracle JDK中提供Retina支持的一些很酷的提示。

根据我几个月前阅读的一个很长的post( http://lists.apple.com/archives/java-dev/2012/Oct/msg00127.html ),在Swing中获取Retina的唯一方法是安装Apple JDK ,反过来只是使用“黑客”使应用程序视网膜兼容。 该线程提到JavaFX作为一种解决方法(当你已经有一个用Swing编写的复杂软件时,这当然不是真正的解决方法)。

在阅读上面的post后,我自己尝试用Java 7编写一个简单的JavaFX应用程序,它在Retina上看起来更清晰; 与Ensamble(App Store上提供的JavaFX演示应用程序)相同,它似乎比普通的Swing应用程序(如Java控制面板)更好,但也许它只是建议的力量。

由于我正在积极测试每个新的Java 8 Snapshot版本,我还可以确认在视网膜显示器上看起来几乎没有工作可以使Swing看起来可以通过。

我们现在最好的选择(只是一个意见,没有任何秘密知识)是Oracle(或OpenJDK撰稿人)的某个人会购买视网膜mac并用Java 8修复它。我不认为Apple会修复它通过提供Java 6修复程序,因为来自Apple的人说他们只是恢复了与渲染回Quartz相关的代码。 它确实给出了预期的结果,但与专有的OS X内部结构密切相关,而这些内部结构并非开源。