Como funciona JVM

Pelo que entendi a JVM é mais que um interpretador, ela faz o papel do S.O.

Algumas linguagens de programação usam as bibliotecas graficas do S.O…

Dúvida: A JVM tem sua própia biblioteca gráfica? ou usa o bytecode para criar as janelas? é por isso que a aparencia das janelas é igual em qualquer plataforma?

Obrigada,
vmm

Que isso amigo?

Parte 2? Toda vez que for fazer uma pergunta do mesmo assunto, faz no mesmo topico que voce acabou de criar… Deu tempo de 40 minutos entre um tópico e outro… :frowning:

Referente a aparencia dos sistemas em java, isso acontece devido ao look and feel. O java possui alguns por padrão, porém, caso precisar utilizar algum look and feel diferente, você precisará levar consigo a biblioteca para o outro sistema operacional.

Sobre usar bytecode que você falou, acredito que essa dúvida surgiu a partir da outra dúvida sua. Até onde eu sei, que já ouvi comentar, a JVM é feito em C. Porém, toda a JRE é em Java, ou seja, é necessário ser gerado um bytecode de cada classe da API nativa do Java.

Sobre a dúvida no outro post

Isso acontece porque a JVM é criado para cada sistema operacional de uma forma diferente. Por exemplo, para listar os arquivos e diretórios no cmd do windows voce digita a palavra ‘dir’. No linux, é ‘ls’. Cada comando desse funciona propriamente em seu sistema operacional. Se você for fazer um programa em C, que compila e gera um código executavel de acordo com o seu sistema operacional, você deverá compilar o código em cada sistema, sem contar que será necessário trocar o comando ‘ls’ por ‘dir’ e vice-versa. O que a JVM faz para você é isso. Ela sabe como funciona em cada sistema operacional, não necessitando você fazer isso por ela.

Abraços

Durante a história do Java, duas abordagens foram utilizadas para fazer a parte gráfica. Uma delas é chamada de lightweight e a outra de heavyweight.

Os gráficos heavyweight foram usados pela AWT. A ideia da AWT era fazer com que a VM chamasse diretamente as APIs nativas de cada plataforma. Assim, o código teria o look&feel da plataforma onde a aplicação estivesse sendo usada. Embora do ponto de vista teórico essa parecesse uma grande ideia, na prática, mostrou-se um barco furado. Era difícil fazer com que as telas não perdessem alinhamento, mantivessem fontes compatíveis, entre outros problemas.

A abordagem então foi partir para aplicações lightweight. No caso do Swing, a plataforma nativa apenas cria uma janela e inicializa um motor gráfico (DirectX no Windows ou OpenGL nas demais plataformas). Com esse motor, todos os componentes são desenhados pela própria VM. Assim, uma aplicação Java pode ficar com aparência muito similar em duas plataformas distintas. Foi introduzido também o conceito de look&feel, citado pelo Gleidson, que nada mais é do que permitir várias formas diferentes dos componentes serem desenhados. Essa abordagem trouxe também a vantagem do Swing ser muito mais extensível e muito mais rápido.

O motor gráfico é encapsulado pela biblioteca Java2D, que faz as vias da API gráfica do sistema operacional.

Mais informações:
http://www.oracle.com/technetwork/java/painting-140037.html