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

时间:2013-03-03 00:26:39

标签: java swing awt java-7 retina-display

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

这已在StackExchange问​​题here中得到解决,并引用了一个特定帖子:

  

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社区是否会对此问题做出相应的响应,或者是否应该预期会有相当大的延迟(数月到一年或更长时间) )之前Java 7中的Swing是否与Apple Retina显示器兼容?

4 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:7)

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

Oracle有一个开放的错误: http://bugs.sun.com/view_bug.do?bug_id=8000629

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

回答简短,经过几天的互联网搜索后,我找不到答案......

此致 Lubos

答案 2 :(得分:6)

完全支持Retina,从1.7.0_40ea开始。但是,Retina缺乏API。例如,在Apple JDK中不支持HiDPIScaledImages。您可以在{JD(1)}

中找到有关Oracle JDK中Retina支持的一些很酷的提示

答案 3 :(得分:2)

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

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

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

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