2013-09-16 14 views
17

Budowałem środowisko programistyczne w Javie (jako mały projekt badawczy). W ramach tego, zbudowałem komponent niestandardowy tekst, który czerpie z samego tekstu przy użyciu Graphics2D tak:Dlaczego czcionki w java 1.7 różnią się od 1.6?

g2.drawString("some text", 100, 100); 

Wszystko działało dobrze rozwija rzeczy w Eclipse przy użyciu 1,6 (zakładam, że jest to przewidziane przez Apple), dopóki nie pakuje wszystko się skończyło i uruchomiłem java 1.7 (dostarczone przez Oracle). Oczywiście w środowiskach programistycznych czcionki są dość ważne, więc nie podobało mi się, aby zobaczyć wyniki w 1.7.

enter image description here

Próbowałem opakowanie niestandardowe czcionki, ale wszystkie one są ziarniste i erozji. Powyższe porównanie nie jest takie złe, ale niektóre czcionki (takie jak Monaco) wyglądają okropnie.

Zgaduję, że ma to związek z tym, jak Apple haczy rzeczy do Kwarcu. Ale czy istnieje sposób na ulepszenie, aby nie wyglądało to okropnie na innych systemach? Czy ktoś ma na to strategię?

Aktualizacja: To porównanie w Monako: enter image description here

i powiększony Porównanie C (w paintComponent) w Monako (1,7 na lewo, na prawo 1.6). Zauważ, że wczytuję czcionkę z lokalnego pliku ttf używając:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("monaco.ttf"); 
Font customFont = null; 
try 
{ 
customFont = Font.createFont(Font.TRUETYPE_FONT, is); 
customFont = customFont.deriveFont(16.0f).deriveFont(Font.BOLD); 
        is.close(); 
        ge.registerFont(customFont); 
       } catch (FontFormatException e1) 
       { 
        e1.printStackTrace(); 
       } catch (IOException e1) 
       { 
        e1.printStackTrace(); 
       } 
this.setFont(customFont); 

enter image description here

Należy również zauważyć, że anty aliasing jest włączony przy użyciu:

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 
+0

używają tej samej czcionki? –

+1

może używają innej domyślnej czcionki?poprosił o – JohnnyAW

+1

Podobne pytanie: http://superuser.com/questions/112326/why-do-the-fonts-in-the-java-application-im-running-look-different-in-mac-os-x – Goibniu

Odpowiedz

14

Java 6 został opracowany przez firmę Apple. Apple włożył dużo pracy w warstwę graficzną, aby współpracował z Quartz/Cocoa, a zwłaszcza aby wyglądał dobrze.

W przypadku platformy Java 7 program Oracle przejął architekturę. To nie znaczy, że Oracle ma źródła od Apple. Zamiast tego zaczęli od nowa (prawdopodobnie przeniesienie kodu Unix do OS X). Oznacza to, że cała praca, którą Apple włożył w sprawienie, aby Java wyglądała dobrze na OS X, została praktycznie utracona.

Apple dba o projekt. Oracle ... cóż ... nie tak dużo (exhibit A, exhibit B)

Co możesz zrobić?

  • Napisz i prześlij poprawkę do OpenJDK.
  • Zdobądź wystarczającą liczbę osób, które zadają Apple prośbę o przesłanie łaty (pieniądze mogą pomóc).
  • Powrót do Javy 6
  • Użyj JNI, aby uzyskać bezpośredni dostęp do Cocoa/Quartz, aby uzyskać silnik renderujący czcionki OS X.

Powiązane artykuły:

+1

+1 Dla dwóch eksponatów. – arshajii

+0

Interesujące. Naprawdę nie ma sensu, aby nie podawać Oracle swojej implementacji ... – alistair

+1

@alistair: Z technicznego punktu widzenia masz rację. Ale chciwość próbuje przejąć IT (patrz trole patentowe, procesy sądowe między Apple i Samsung). Sądzę, że Apple dostarczyłoby Oracle kopię, gdyby Oracle ją licencjonowała, ale Oracle nie chce niczego licencjonować, chyba że może zarabiać z nią. Ile zapłaciłeś za swoją kopię Java 7? Więc to jest impas. –

Powiązane problemy