Поддержка дисплея Apple Retina в Java JDK 1.7 для AWT / Swing
Я только что узнал, что AWT / Swing под Java JDK 1.7 (по состоянию на JDK 7u15) не поддерживает Retina-дисплеи на Apple Macbook Pro. Netbeans, например, почти невыносимо использовать более нескольких минут на дисплее Retina и с помощью JDK 1.7.
Это было несколько рассмотрено в вопросе StackExchange здесь, и цитируя один конкретный пост:
Java 6 JRE от Apple будет поддерживать HiDPI, однако в настоящее время это не так поддерживается Java 7 JRE Oracle. Он также не работает под последними сборками dev Java 8. Приложения Swing и JavaFX размыты на MacBook Retinia. Вот почему IntelliJ все еще работает под Java 6.
мой вопрос более конкретный, чем то, что задано OP вышеупомянутого потока.
мой работодатель менее месяца использует Swing во всех своих приложениях. По нескольким причинам мы заинтересованы в переходе на Java 7 С Java 6. В течение последних нескольких дней, другой разработчик (который находится в Windows) переместил нашу платформу на Java 7. Когда я запускаю retina Macbook Pro, я заметил проблему, когда вытащил последнюю стабильную ветвь нашего кода.
Я новичок в Java с менее чем годовым опытом работы в сообществе, поэтому мой вопрос: будет ли сообщество Java достаточно реагировать на эту проблему, продвигаясь вперед, или следует ожидать существенной задержки (от месяцев до года или более), Прежде чем Swing в Java 7 будет совместим с Apple Retina дисплеи?
4 ответов
Java 7u40 Early Access теперь поддерживает дисплеи HiDPI (Retina), как показано этот журнал изменений. Таким образом, поддержка retina теперь доступна на:
- Java 6
- Java 7u40ea или больше
- Java 8
в прошлом месяце я также интересовался той же темой, и через некоторое время я узнал в сети, что никто не может точно ответить на вопрос.
существует открытая ошибка для этого в Oracle: http://bugs.sun.com/view_bug.do?bug_id=8000629
в соответствии с этим он должен быть исправлен для Java 1.8. Но чего я боюсь, так это того, что я не уверен, будет ли он также исправлен для Swing или только для JavaFX. Я где-то читал, что уже есть исправление для JavaFX (но не конечно, если официально), что не решает проблему для Swing.
чтобы ответить коротко, после нескольких дней поиска в Интернете, к сожалению, я не смог найти ответ ...
с уважением, Любос!--1-->
Retina полностью поддерживается Oracle начиная с 1.7.0_40ea. Однако, есть недостатки APIs для сетчатки. Например, нет поддержки HiDPIScaledImages, как в Apple JDK. Вы можете найти несколько интересных советов о поддержке Retina в Oracle JDK здесь http://bulenkov.com/2013/06/23/retina-support-in-oracle-jdk-1-7/
согласно длинной теме, которую я прочитал несколько месяцев назад (http://lists.apple.com/archives/java-dev/2012/Oct/msg00127.html) единственный способ получить Retina в Swing-установить Apple JDK, который, в свою очередь, просто использует "хак", чтобы сделать приложения совместимыми с retina. Этот поток упоминает JavaFX как обходной путь (который, конечно, не является реальным обходным путем, когда у вас уже есть сложная часть программного обеспечения, написанная в Swing).
Я сам пытался написать простой плагин приложение с Java 7 после прочтения вышеупомянутого потока, и оно выглядело более острым на Retina; то же самое с Ensamble (демонстрационное приложение JavaFX, доступное в App Store), которое также казалось намного приятнее, чем обычное приложение Swing (например, панель управления Java), но, возможно, это просто сила предложения.
поскольку я активно тестирую каждый новый выпуск моментальных снимков Java 8, я также могу подтвердить, что мало никакой работы не было сделано, чтобы получить Swing Look проходимым на retina дисплеи.
наш лучший выбор прямо сейчас (просто мнение, не имеют никаких секретных знаний) заключается в том, что кто-то в Oracle (или OpenJDK contributor) купит retina mac и исправит его в Java 8. Я не думаю, что Apple исправит это, поставив исправления Java 6, так как парень из Apple сказал, что они просто вернули код, связанный с рендерингом обратно в Quartz. Он дал желаемый результат, но сильно привязан к проприетарным OS X internals, которые не являются открытыми источниками.