Mostrando postagens com marcador Java. Mostrar todas as postagens
Mostrando postagens com marcador Java. Mostrar todas as postagens

Agora sim, SCEA 5

0 comentários
Passei na prova do SCEA 5!!!!!

Definitivamente, foi uma prova pesadisima.

Estudei pelos seguintes livros:
Sun Certified Enterprise Architect for Java EE Study Guide (2nd Edition)
Design Patterns: Elements of Reusable Object-Oriented Software
Core J2EE Patterns: Best Practices and Design Strategies

Agora, é partir para o projeto do SCEA

Memory Leaks por referência obsoleta.

2 comentários
Esse post tem como fonte original o livro "Effective Java" - second edition de Joshua Bloch.

Quando entramos no mundo do Java temos a sensação que não devemos nos preocupar com o recolhimento de memória, pois, existe o Garbage Collector. Contudo, isso não é bem verdade. Veja o código do link abaixo:

Stack

A classe stack é muito conhecida pelos programadores e pergunto, você seria capaz de identificar um memory leak (vazamento de memória)?

Quando damos um pop na pilha ele decrementa o size do array dando a impressão de que o objeto foi removido. Contudo, ele ainda está lá e nem é elegível ao Garbage Collector. Apesar do size truncar o tamanho da pilha o objeto ainda existe na memória. Se você fizer size++; ele ainda estará lá e você conseguirá acessa-lo.

Então, para remover essa referência obsoleta faça:
public Object pop() {
if (size == 0) {
throw new EmptySizeException();
}
Object result = elements[--size];
elements[size] = null;

return result;
}

Vale lembrar que isso não garante o recolhimento do objeto, veja o código abaixo:

Stack st;
...
Object ob = st.pop();
...

Apesar, da pilha destruir a referência ao objeto que é retornado do método pop, uma nova referência é criada para ele. Contudo, ainda vale apena aterrar a referência dentro do array.

Java rodar arquivo .bat

0 comentários

English version at the following link:


enprogramminghome.blogspot.com

Oi pessoal,

Observei que algumas pessoas entram no blog procurando uma maneira de Java executar arquivos .bat.

Isso é possível, basta compilar e executar o seguinte código:

public class RunBat {

public static void main(String[] args) throws Exception {
String arquivoBat = "nome.bat"
Process p = Runtime.getRuntime().exec(arquivoBat);
System.out.println("Esperando .bat terminar a execução");
p.waitFor();
}
}

A String arquivoBat pode receber os seguintes valores:
1-) Nome simples do arquivo .bat se o .class desse .java estiver no mesmo diretório.
2-) Nome simples do arquivo .bat se ele puder ser reconhecido globalmente pelo sistema operacional. Ex: Se o seu diretório de localização está no
path.
3-) Caminho completo do .bat.

Desabilitar o campo de texto (JTextField) do JFileChooser

2 comentários
English version at:
link

Atualmente, estava tentando desabilitar o JTextField de um JFileChooser que estou trabalhando.

A princípio, pensei: "Tranquilo."

Mas, para a minha surpresa vi que não havia nada implementado, mas, como o programador que sou tentei implementar algo:

Tentei o seguinte:
Components[] comp = meuJFileChooser.getComponents();
for(Component c: comp) {
if(c instanceof JTextField) {
c.setVisible(false);
}
}

Bem...isso não funcionou, mas, a idéia seguinte funcionou


Clique aqui para ver a solução.

A dificuldade do problema é obter a referência do JTextField em questão.

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);
}

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.

Desligar computador a Distância no Windows usando Java

0 comentários
Hoje, pensei em uma idéia para desligar meu computador a distância. Consegui e a técnica é bem simples.

Primeiro, no computador que será desligado é necessário que algum código que estabeleça uma conexão em uma porta qualquer (acima da porta 1024) a fim de aguardar a ordem de desligamento.

O desligamento é feito pelo comando "shutdown.exe" do Windows (está na pasta c:\WINDOWS\system32\)

Então, criei uma classe que estabelece uma conexão por TCP na porta 10001. E ela espera somente duas "frases".

Frase 1 - Senha para o desligamento
Frase 2 - argumentos para o desligamento

A senha é importante para que nenhum outro código (além do seu) desligue a máquina.
Os argumentos para o desligamento são os mesmos do comando "shutdown.exe".

A classe que dá a ordem para desligar deve enviar a senha e os argumentos para a porta do computador a ser desligado. E pronto.

A classe ShutListener é o ouviente para ordem. Deixa-a rodando na máquina que vc pretende desligar.

A classe ShutLauncher é o disparador.

p.s: Uso de ShutLauncher

Abra o terminal e vá aonde o .class está e execute
java ShutLauncher 111.111.111.111 -r

O primeiro argumento é o ip da máquina a ser desligado e -r fará com que seja aberta uma janela dizendo o Windows será encerrado dentro 30 segundos.

Argumentos que podem ser passados:
-Abra o terminal e digite: shutdown /?
-Este artigo pode ajudar: link

Comentários:
- Você pode facilmente adaptar para o Linux.
- TCP é usado para garantir que as mensagens enviadas sejam recebidas, pois, TCP implementa transporte confiável. Eu poderia ter usado UDP e implementar o transporte confiável, mas, não estava com disposição para isso.

Arquivo .class

2 comentários
O arquivo com extensão .class é resultado da compilação correta (pelo javac) de um .java.

Hoje, abri um .class em um editor de texto padrão e vi que ele contém texto contendo nome de atributos, herança, parte do código dentro dos métodos e dentre outros.

Então, é possível juntar os dois no modo binário (não o contrário).

Isso justifica o fato de ser possível transformar um .class no seu respectivo .java.

Para comprovar o que digo, o código cria um arquivo em modo binário e insere informação em ascii e binário. Abra o arquivo gerado e veja o resultado

O Algoritmo de Dijkstra (Caminho mais Curto) em Java

7 comentários

English version at the following link:


enprogramminghome.blogspot.com

Olá pessoal,

Em link está um uma classe que programei que possui um único método search(type::TypeSearchEnum, v:int, cost:Graph<Double,Double>):SearchInfo

Vamos discutir a O.O deste método:
Esse método foi projetado para que diferentes tipos de buscas pudessem ser realizadas. A enumeração TypeSearchEnum tem somente o tipo "DIJKSTRA", pois somente programei
esse tipo de busca. Posteriormente, podemos inserir "BFS", "DFS","KRUSKAL",...

Se "TypeSearchEnum" é "DIJKSTRA" é chamado o método privado
-dijkstra(v:int, cost:Graph<Double,Double>):SearchInfo

Obviamente, este último método faz busca de Dijkstra em um grafo definido pela interface Graph&lK,V> (K = V = Double). Porque um objeto Graph<K,V>?
Eu poderia ter criado uma assinatura para cada tipo de grafo ex: "double[][] custos",
"LinkedList<LinkedList<Double>> custos", "ArrayList<ArrayList<Double>> custos", "ArrayList<LinkedList<Double>> custos"...

É possível pensar em uma quantidade enorme de assinaturas, o que implica em multiplicação de código. Agora, imagine que todos esses exemplos de grafos acima implementem uma interface "Graph<K,V>" que contém métodos de acesso apropriados a estrutura de dados. Assim, criando uma única assinatura podemos lidar com esse problema!!! (Polimorfismo pela interface)

Com essa aplicação percebe-se que nós saímos daquela idéia simplista de que uma interface é apenas um contrato. O que vimos acima é a vantagem das interfaces, um
polimorfismo inigualável.

O método acima retorna um objeto SearchInfo (explicarei esse objeto daqui a pouco) que contém os resultados da busca. Quais são esses resultados?
Evidentemente, cada vértice é representado por um inteiro. O resultado de uma busca a partir de um vertice "v" são os menores caminhos dele para TODOS os demais vértices. Um menor caminho não é baseado no número de vértices e sim na menor distância, então, é interessante que também sejam as menores distâncias. E são essas informações que SearchInfo armazena. Esta classe disponibiliza dois métodos públicos para consulta.

getPathFrom(vertex:int):LinkedList{Integer}

Este método retorna o menor caminho do vértice "v" para um vértice "vertex" do grafo. Uma linkedlist é usada devido as diferenças que podem existir no número de elementos em um caminho e também porque os elementos são inseridos por addFirst(e:E) (esse método executa em O(1)).

getPathFrom(vertex:int):double

Este método retorna a menor distância do vértice "v" para um vértice "vertex" do grafo.

A classe SearchInfo é interna a SearchGraphAlgorithms, pública e com construtor privado. Isso foi pensado da seguinte maneira:
Essa classe deveria conter um método que contruisse os caminhos a partir de um vetor de vértices anteriores gerado pelo método de dijkstra. Mas as pessoas não devem acessar esse método externamente, então, ele deveria ser privado. Contudo, a classe SearchGraphAlgorithms deve ser capaz de usar esse método de construção de caminhos, assim, a classe SearchInfo deve ser interna a SearchGraphAlgorithms.
SearchInfo deve ser pública para que código externo seja capaz de acessar os resultados da busca, contudo, o contrutor é criado a partir de uma vetor de menores distâncias gerado pelo método "dijkstra", então, o construtor deve ser privado a código externo e vísivel a SearchGraphAlgorithms, o que é possível pois SearchInfo é interno.

A interface Graph contém somente dois métodos:
+ get(i:int, j:int):V
+ size():int

Como aplicação, criei uma classe MatGraph que monta uma matriz de adjacência a partir de um arquivo formatado:
Ex:
8
0 * * * * * * *
30 0 * * * * * *
100 80 0 * * * * *
* * 120 0 * * * *
* * * 150 0 25 * *
* * * 100 * 0 90 140
* * * * * * 0 100
170 * * * * * * 0

A primeira linha deve conter o número de vértices. As demais linhas contêm as distâncias das adjacências. Quando não existir conexão o símbolo "*" deve ser inserido.

Na Classe Main está a aplicação desses códigos.

A numeração dos vértices começam a partir do zero.

Espero que tenham gostado!

Considerações finais:
Seja correto, caso você copie esse código no seu trabalho/projeto não deixe de indicar a minha autoria. Lembre-se que esse post é muito fácil de achar na internet e possui uma Orientação a Objetos um tanto peculiar, não seja uma pessoa tola.

Algumas Interfaces de java.util, parte 1

0 comentários
Na biblioteca java.util estão definidas importantes classes e interfaces de estruturas de dados para o desenvolvimento de aplicações, além de outros utilitários.

Assim, proponho neste post tratar de algumas interfaces e suas respectivas implementações. Decidi, dividir em várias partes, para que não ficasse cansativo para mim e nem para quem está lendo.

Iterable é uma interface que está em java.lang e define um único método: iterator(void)::Iterator. Primeiramente, vamos discutir porque essa interface está em java.lang. A resposta para essa pergunta é simples, pois, classes de diversas bibliotecas a implementam. Um objeto que implementa Iterator possui a capacidade de iterar sobre a estrutura de dados corrente, posteriormente, explicarei as vantagens de objeto em determinados tipos de coleções e também ListIterator.

A interface Collection herda Iterable, definindo mais métodos para operar a estrutura.
A partir desta última interface existem dois subtipos, Set e List.
Set é uma coleção onde não é permitido elementos duplicados e nem garante a ordem de inserção dos mesmos. Suas implementações mais conhecidas são: TreeSet, HashSet, LinkedHashSet e EnumSet.
List
é uma coleção que permite elementos duplicados e garante a ordem de inserção dos mesmos. Suas implementações mais conhecidas são: Vector (legado), Stack (legado), ArrayList e LinkedList.

Abaixo, segue uma diagrama contendo esses tipos básicos de interface.



Continua...

Programa que abre uma página no I.E

0 comentários
Olá a todos,

Este código em Java, é capaz de abrir uma página no Internet Explorer.
Consiste em abrir o processo do Handler do I.E através de Runtime.getRuntime().

Arquivo .bat

1 comentários

English version at the following link:


enprogramminghome.blogspot.com

Um .bat é arquivo texto que podem ser inseridos comandos para serem rodados pelo interpretador do DOS (No Unix/Linux nunca testei um .bat). Quais comandos podemos inserir? Comandos padrões do DOS, nomes de arquivos (incluindo o caminho para diretórios diferentes) e conteúdo da variável path.

Exemplo:
Suponha que no diretório que você está trabalhando contém o arquivo Registro.java, que imprime na tela um registro qualquer, e queremos compila-lo, executá-lo, redericionarmos a saída para "sai.txt" e abrir este último arquivo. Ao invés de fazermos isso manualmente podemos criar o arquivo test.bat com o seguinte conteúdo:

javac Registro.java
java Registro > sai.txt
sai.txt

---FIM---Não incluir essa linha no arquivo

Quando clicarmos em test.bat ou roda-lo por linha de comando tudo será feito automaticamente!!
Isso implica em aumento de produtividade.
Podemos fazer isso para simular um executável de Java. Basta inserirmos no arquivo:
java NomeDaClasse

Não é uma solução que um .exe proporciona, mas é melhor do que ir no prompt e digitar o comando do interpretador.

James Gosling

0 comentários
Esse é o cara da computação, um grande nome.
Sem dúvida nenhuma um artista.

O vídeo já fala por si só.
http://www.youtube.com/watch?v=XiOgCSi1jlg

Códigos atualizados

2 comentários
Bem pessoal,

Como prometi, atualizei nas postagens os códigos que estão no blog.

Abaixo, segue a lista de todos os códigos atualizados.

Grafo de Lista de Adjacência

Interface Graph

Métodos Utilitários de Busca em H.D

Algoritmo caçador de Links em páginas HTML

Teste para Jconsole

Worm consumidor de memória

Teste para Imutabilidade de Strings

Teste para comparação de Strings

Exemplo de operador de canalização em Java

Exemplo de operador de canalização em C++

Só faltou o de intercalação por chave ordenada, pois, eu acho que ele pode ser melhorado.

Se faltou algum código me avisem.

Obrigado a todos e desculpe aqueles que quiseram acessar algum código mas não conseguiram.

Como Java cria Objetos

5 comentários
Enfim!!!
O texto está neste link:

http://dfm.ffclrp.usp.br/infobio/ibm_dir/javacriaobj.pdf

O servidor do dfm as vezes cai.

Se tiver algum erro de português ou técnico me avisem.

Em homenagem ao Fábio eu fiz em Latex!! Uma super linguagem de edição de textos. Depois eu vou postar um tópico sobre ela!

Abraço a todos.

Agradecimentos a Hugo César Pessoti por ter posto o arquivo no servidor do mal, hehehehe.

Ratings:

Avaliação deste artigo

Copyright © Programming @ home