2013-03-03 10 views
24

Mi sono appena reso conto che AWT/Swing in Java JDK 1.7 (a partire da JDK 7u15) non supporta i display Retina su Apple Macbook Pro. Netbeans, ad esempio, è quasi insopportabile da utilizzare per più di qualche minuto su un display Retina e usando JDK 1.7.Supporto display Apple Retina in Java JDK 1.7 per AWT/Swing

Questo è stato un po 'affrontata in una domanda StackExchange here, e citando un post specifico:

di Apple Java JRE 6 sosterrà HiDPI, tuttavia non è attualmente supportato da Oracle Java 7 JRE. Inoltre, non funziona con le ultime versioni di sviluppo di Java 8. Le app di Swing e JavaFX sono sfocate su un MacBook di Retinia. Questo è il motivo per cui IntelliJ funziona ancora con Java 6.

La mia domanda è più specifica di quella richiesta dall'OP del thread precedente.

Il mio datore di lavoro di meno di un mese utilizza Swing in tutte le sue applicazioni. Per diversi motivi siamo interessati a migrare a Java 7 da Java 6. Negli ultimi giorni, un altro sviluppatore (che è su Windows) ha spostato la nostra piattaforma su Java 7. Poiché eseguo un MacBook Pro retina, ho notato il problema quando ho estratto l'ultimo ramo stabile del nostro codice.

Sono nuovo di Java con meno di un anno di esperienza nella comunità, quindi la mia domanda: la comunità Java sarà abbastanza reattiva a questo problema in futuro, o si dovrebbe prevedere un sostanziale ritardo (da mesi a un anno o altro) prima che Swing in Java 7 sia compatibile con i display Apple Retina?

risposta

19

Java 7u40 Early Access supporta ora HiDPI display (retina), come mostrato da this changelog. supporto in modo retina è ora disponibile su:

  • Java 6
  • Java 7u40ea o superiore
  • Java 8
+0

Grazie, che ordina fuori swing (usando Java7u40ea). non sembra per aiutare con JavaFX , anche se -.. ottengo belle finestre a battente taglienti e quelli JavaFX sfocati –

+0

in realtà, sembra funzionare per JavaFX così Ora tutto è bello e forte Fantastic –

7

il mese scorso ero anche interessato allo stesso argomento e dopo un po 'di tempo ho scoperto su rete che nessuno può rispondere esattamente alla domanda.

C'è un bug aperto per questo a Oracle: http://bugs.sun.com/view_bug.do?bug_id=8000629

Secondo che dovrebbe essere fissato per Java 1.8. Ma quello di cui ho paura è che non sono sicuro che verrà risolto anche per Swing o solo per JavaFX. Ho letto da qualche parte che esiste già una correzione per JavaFX (ma non sono sicuro se ufficiale), che non risolve il problema di Swing.

Per rispondere a breve, dopo alcuni giorni di ricerca su internet purtroppo non ho potuto trovare la risposta ...

saluti, Lubos

+0

nessuna informazione difficile, solo una supposizione: il sottocomponente a cui è stato rilasciato un bug è java.awt - se questo è valido, è probabile che venga risolto contro il vecchia grafica. – kleopatra

+0

vero, ma intendevo che nessuno può dire con certezza che il bug sarà veramente corretto. Non sono riuscito a trovare su internet informazioni almeno che il lavoro sia già iniziato e Java 8 dovrebbe essere rilasciato a settembre. – Lubos

+2

Una correzione è stato creato per Java 8 e dovrebbe essere ufficialmente implementato presto: http://mail.openjdk.java.net/pipermail/macosx-port-dev/2013-April/005491.html. Non sono sicuro se ci sono piani per un backport, a Java 7. – Thunderforge

2

Secondo un lungo filo che ho letto qualche mese fa (http://lists.apple.com/archives/java-dev/2012/Oct/msg00127.html) l'unico modo per ottenere Retina in Swing è installare Apple JDK, che a sua volta utilizza solo un "hack" per rendere le applicazioni retina-compatibili. Quel thread menziona JavaFX come una soluzione alternativa (che ovviamente non rappresenta una vera soluzione quando hai già un software complesso scritto in Swing).

Io stesso ho provato a scrivere una semplice applicazione JavaFX con Java 7 dopo aver letto il thread precedente e sembrava più nitido su Retina; lo stesso con Ensamble (l'applicazione demo JavaFX, disponibile su App Store) che sembrava molto più bella di una normale applicazione Swing (come il pannello di controllo Java) ma forse è solo il potere del suggerimento.

Dal momento che sto testando attivamente ogni nuova versione di Snapshot di Java 8, posso anche confermare che è stato fatto poco o nessun lavoro per far sì che Swing sia passabile sui display retina.

La nostra migliore scommessa in questo momento (solo un'opinione, non ho alcuna conoscenza segreta) è che qualcuno in Oracle (o un collaboratore di OpenJDK) acquisterà un retina mac e lo aggiusterà in Java 8. Non credo Apple lo aggiusterà fornendo le correzioni di Java 6 dal momento che il ragazzo di Apple ha dichiarato di aver appena ripristinato il codice relativo al rendering di Quarzo. Ha dato il risultato desiderato ma è fortemente legato agli interni proprietari di OS X che non sono open source.

+0

Grazie per il collegamento. Dopo aver letto il thread e tutti i link in esso contenuti, non sono nient'altro che scoraggiato :(Sembra che per applicazioni client embedded, gli sviluppatori Java che stanno utilizzando (1) Swing e JRE 6, (2) vogliano migrare oltre JRE 6 e (3) preoccupano la presentazione della loro applicazione sul display HiDPI, non hanno altra scelta, ma di dare un taglio duro con swing. ho preso uno sguardo al Ensemble (https://itunes.apple.com/us/app/insieme/id557744983? mt = 12), che è una demo app JavaFX, e sono d'accordo che JavaFX sembra _better_. non è ancora retina croccante. – kalefranz

6

Retina è pienamente supportato da Oracle 1.7.0_40ea partenza. Tuttavia, ci sono carenze di API per Retina. Ad esempio, non esiste alcun supporto per HiDPIScaledImages come in Apple JDK. Puoi trovare alcuni fantastici suggerimenti sul supporto Retina in Oracle JDK qui http://bulenkov.com/2013/06/23/retina-support-in-oracle-jdk-1-7/

+0

eccellente risorsa, grazie mille per il tempo dedicato a.! scrivi questo –