Alterar ícone do JFrame

0 comentários
Por padrão, o ícone que aparece no canto superior de um JFrame é o símbolo do Java (xícara de café). Uma questão importante no design é que esse ícone seja o logo representante do software criado.
Para alterar esse ícone com um suposto arquivo png chamado "logo.png" basta seguir o seguinte código em Java:
class Teste {
JFrame jf = new JFrame();
...
java.net.URL url = getClass().getResource("logo.png");
java.awt.Image im = java.awt.Toolkit.getDefaultToolkit().getImage(url);
jf.setIconImage(im);
}

[OFF] Um programador Certificado

0 comentários
Olá a todos,

A certificação de programador Java SE é um documento emitido pela Sun Microsystems, que comprova que o portador tem proficiência em Java SE (Aplicações Desktop e Servidores). A Sun não libera o número de pessoas que possuem a certificação, mas, é estimado que somente 10% dos profissionais em Java a possuem, o que a torna um documento de impacto na hora da contratação.

E ontem, tive o meu level-up. Passei na prova. É um exame bem difícil. Posteriormente, farei um post sobre o livro que usei para estudar.

Indução do Laço e Redução da Força

0 comentários
Indução do Laço e Redução da Força são técnicas de otimização de laços (for, while, ...), normalmente, empregadas pelos compiladores.

Seja o seguinte laço,

for(i = 0; i < 1000000; i++) {
vetor[i] = 0;
}


Cada elemento da variável vetor tem um tamanho x, assim, para acessar cada elemento é necessário efetuar a seguinte operação de multiplicação (base + i * x). Em vez de usar os índices para acessar os elementos, pode-se aplicar a seguinte técnica:

1. endAddress = &vetor[1000000];
2.
3. for(pointer = vetor; pointer < endAddress; pointer++) {
4. *pointer = 0;
5. }

Na linha 1 é obtido o endereço de memória do último elemento que desejamos acessar do vetor. Na linha 3 o ponteiro pointer recebe o endereço inical do vetor e a operação pointer++ realiza o incremento para o endereço de memória da variável seguinte, eliminando a lenta operação de multiplicação.

O processo de criar novas variáveis a partir das variáveis do laço é chamado de Indução do Laço. Devido a indução fazer com que menos operações sejam realizadas ocorre a Redução da Força.

Normalmente, os compiladores automaticamente induzem o laço.

Usando Timer e TimerTask

0 comentários
Timer e TimerTask são classes Java usadas para executar tarefas paralelamente com o código que a dispara. Neste momento você pensa: "Mas, Threads já fazem isso.". Sim, elas fazem, mas, o diferencial é que a classe Timer faz com que a tarefa seja executada somente após um período de tempo ou periodicamente.

Primeiramente, crie uma classe que herde TimerTask. A classe não abstrata PrintTask faz essa herança e implementa o método abstrato +run(void):void. No método run está a implementação da tarefa (imprimir o valor do contador e icrementar). Vide a API para entender o método cancel.

Agora, desejo que seja impresso no terminal o valor do contador a cada segundo. Então, usamos a classe Timer para realizar essa tarefa. Basta fazer,

Timer tim = new Timer();
tim.scheduleAtFixedRate(new PrintTask(), 0, 1000);


E pronto. A mágica acontece nos métodos de escalonamento da classe Timer. Três tipos de escalonamento podem ser feitos:
- Única Execução
- Retardo Fixo
- Taxa Fixa

Explicação dos tipos de escanolamento
1- A única Execução é quando a tarefa do TimerTask associado é executada uma única vez
Métodos:
-- public void schedule(Timer Task, Date time) - executa a tarefa na data especificada

-- public void schedule(Timer Task, long delay) - executa a tarefa após delay millisegundos.

2 - O Retardo fixo é quando a tarefa do associado é executada periodicamente de acordo com uma taxa de tempo especificada. E a periocidade é garantida. Ex: Suponha que a tarefa executa com taxa de 5 segundos e a sua última execução foi as 15:20:50 h , então, a próxima execução deve ser as 15:20:55, entretanto, diversos retardos podem ocorrer (devido a coleta de lixo, escalonamento de Threads e demais atividades) fazendo com que a próxima execução seja depois de 5.1 segundos (supostamente). Assim, o algoritmo de Retardo Fixo vai garantir que a execução ocorra no tempo correto, encurtando o intervalo do período.
Métodos:
-- public void schedule(Timer Task, Date firstTime, long period) - A tarefa é executada com escalonamento de Retardo Fixo, iniciando na data firstTime com uma taxa period.

-- public void schedule(Timer Task, long delay, long period) - A tarefa é executada com escalonamento de Retardo Fixo, iniciando após delay millisegundos com uma taxa period.

3 - O escalonamento de Taxa Fixa é quando uma tarefa do associado é executada periodicamente de acordo com uma taxa de tempo especificada e não há encurtamento do intervalo, uma vez que houve algum atraso. A importância está na frequência do evento.
Métodos:
-- public void scheduleAtFixedRate(Timer Task, Date firstTime, long period) - A tarefa é executada com escalonamento de Taxa Fixa, iniciando na data firstTime com uma taxa period.

-- public void scheduleAtFixedRate(Timer Task, long delay, long period) - A tarefa é executada com escalonamento de Taxa Fixa, iniciando após delay millisegundos com uma taxa period.

Ratings:

Avaliação deste artigo

Copyright © Programming @ home