2012-02-17 15 views

risposta

5

OpenJDK source è la strada da percorrere. Hai solo bisogno di colpire la cartella corretta. Si può vedere il codice all'interno del genere:

checkbox = new AwtCheckbox(); 
... 
checkbox->CreateHWnd(env, labelStr, style, exStyle, 
     x, y, width, height, 
     awtParent->GetHWnd(), 
     reinterpret_cast<HMENU>(static_cast<INT_PTR>(
    awtParent->CreateControlID())), 
     ::GetSysColor(COLOR_WINDOWTEXT), 
     ::GetSysColor(COLOR_BTNFACE), 
     peer); 

CreateHWnd funzione può essere trovato nel file di awt_Component.cpp, in cui chiede CreateWindowEx funzione.

+0

Bello, ben trovato. Hai trovato da dove vengono chiamate quelle funzioni? – Jivings

+0

Ogni componente AWT ha un peer: class, che rappresenta il componente nativo. Se si guarda nel codice sorgente, vedrete che ci sono diversi metodi Java nativo, che manipola la classe AWTCheckBox (per esempio) e di fatto crea il componente nativo. Guardate in http://hg.openjdk.java.net/jdk7/awt/jdk/file/23bdcede4e39/src/windows/native/sun/windows/awt_Checkbox.cpp (linea 663). Viene chiamato da Java per creare il peer del componente AWT. –

+0

È possibile avere la risposta contrassegnata corretta perché si è risposto più rapidamente con una risposta effettiva che aveva senso ed era utile. – Jivings

2

È un dettaglio di implementazione. Lo standard de facto sarebbe come Oracle lo ha implementato. Se davvero vuoi sapere, dai un'occhiata al codice sorgente. Può essere trovato a http://openjdk.java.net/. I collegamenti sono nella colonna di sinistra sotto la casella di ricerca. Le classi pertinenti devono essere nel pacchetto sun.awt.

+0

Ho guardato la fonte per quel pacchetto. Non riesco ancora a capire in che modo il codice nativo interagisce con il sistema operativo per creare una GUI. Dove posso trovare il codice nativo che mostra letteralmente una finestra? Perché non sembra essere in '/ native/sun/awt/*'. – Jivings

+0

http://openjdk.java.net/groups/awt/ dovrebbe aiutarti a trovare le parti pertinenti. Apparentemente il codice è distribuito su molte directory e ci sono alcune parti del codice che non vengono più utilizzate. –

+0

+1 Il codice sorgente JVM sarebbe la documentazione autorevole per tale interesse di basso livello. Per OpenJDK 7, avviare [qui] (http://hg.openjdk.java.net/jdk7/awt/jdk/file/23bdcede4e39/src/). –

-2

Awt utilizza i metodi . Questi sono metodi java che fanno riferimento a metodi nella lingua nativa in un file separato. Quindi, in sostanza, se stai usando Windows e vuoi aprire una finestra, java userà C++ per aprire la finestra.

http://en.wikipedia.org/wiki/Java_Native_Interface

http://en.wikipedia.org/wiki/Java_AWT_Native_Interface

+0

Grazie, so quali sono i metodi nativi e come usarli. Questa non è la mia domanda. Sto cercando i metodi nativi specifici che eseguono questa interazione e le informazioni su * come * lo eseguono. – Jivings

+0

basta google come farlo con il sistema operativo di base. se volete sapere come lo fanno su un computer Windows, google come fare una finestra in C++ –

+0

'Proprio Google come fare Liechtenstein attua. Wow grazie per il tuo aiuto. – Jivings

4

base:
La maggior parte delle librerie di classi GUI in C++ sono specifica piattaforma, non solo a causa di diverse funzioni hardware, ma sottili differenze tra il "look-and-feel" delle diverse realtà operative Windowing sistemi. Java Abstract Window Toolkit fornisce una libreria multipiattaforma che cerca di osservare le convenzioni di tipo "look and feel" di varie piattaforme OS.

  Toolkit ------------------------------------------------ AWT 
     --------|--------- 
    Button    List           JVM 
    ------|-------------|-------------------------------------------------- 
    Button Peer  List Peer      Native GUI (Windows, Mac, X) 

Maggiori informazioni su Java GUI Event Programming

AWT fornisce due livelli di API:

  • Un'interfaccia generale tra Java e il sistema nativo, usato per a finestre, eventi, e gestori di layout. Questa API è al centro della programmazione GUI Java ed è anche utilizzata da Swing e Java 2D.Esso contiene:

    1. L'interfaccia tra il sistema di finestre nativo e l'applicazione Java;
    2. Il nucleo del sottosistema di eventi della GUI;
    3. Diversi gestori di layout;
    4. L'interfaccia per dispositivi di input come mouse e tastiera;
          e
    5. Un pacchetto java.awt.datatransfer da utilizzare con gli Appunti e il trascinamento.
  • Un set di base di GUI widget come pulsanti, caselle di testo e menu.
    Fornisce inoltre lo AWT Native Interface, che consente alle librerie di rendering compilate in codice nativo di disegnare direttamente su una superficie di disegno di un oggetto Canvas AWT.

AWT rende anche alcune funzionalità di livello superiore disponibile per le applicazioni, come ad esempio:
accesso al vassoio del sistema su sistemi di supporto; e La possibilità di avviare alcune applicazioni desktop come browser Web e client di posta elettronica da un'applicazione Java.
Per ottenere il codice sorgente per le classi AWT nativi OpenJDK utilizzare il collegamento sotto

jdk6/jdk6-gate/jdk/src/windows/native/sun/
jdk6/jdk6-gate/jdk/src/windows/native/sun/windows/ (classi di Windows-AWT-nativi).

OpenJDK (GPL)

  • Sun ha annunciato nel 2006 che Java sarebbe diventato il software open-source.
  • Rilasciato il codice sorgente completo della libreria di classi Java sotto GPL l'8 maggio 2007,
  • L'11 ottobre 2010, IBM, di gran lunga il più grande partecipante al progetto Apache Harmony, ha deciso di unirsi a Oracle nel Progetto OpenJDK, spostando efficacemente i suoi sforzi da Harmony a OpenJDK.
  • L'11 gennaio 2011, il progetto Mac OS X Port è stato creato su OpenJDK e Apple ha dato il primo contributo pubblico del codice al progetto. Il contributo Apple iniziale basato sulla porta BSD OpenJDK (OpenJDK™ 6 Source Release).

Riferimento:

[OpenJDK Repositories.]

Open jdk6/jdk6-gate/jdk/src/share/classes/java/awt/ (codice di esempio AWT Fonte Package)

Il principale OpenJDK project, che si basa su JDK 7

si può scoprire caratteristiche OpenJDK here

Caciocavallo , Progetto che fornisce un'API Java basata su OpenJDK per semplificare l'implementazione AWT su nuovi sistemi. Il progetto ect ha implementato con successo i widget AWT utilizzando Java2D.
[OpenJDK Mailing list.]

AWT Documentation Read per ottenere chiare le conoscenze sulle sue implementazioni.

Fallow awt-dev Mailing Lists di mettersi in gioco.

+0

Risposta eccellente signore. Grazie mille. – Jivings

+0

Ho anche scoperto questo; http://hg.openjdk.java.net/jdk6/jdk6-gate/jdk/file/66a97657a058/src/share/javavm/export/jawt.h – Jivings

+0

è fantastico, se hai richiesto informazioni. :) –

Problemi correlati