<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Code Error - É errando que se aprende</title>
	<atom:link href="http://codeerror.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://codeerror.wordpress.com</link>
	<description>Dicas para resolver aqueles problemas e mensagens de erro durante a programação</description>
	<lastBuildDate>Thu, 12 Nov 2009 18:14:45 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='codeerror.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/6f8480bd72135ea84276c268c5559cda?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Code Error - É errando que se aprende</title>
		<link>http://codeerror.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://codeerror.wordpress.com/osd.xml" title="Code Error &#8211; É errando que se aprende" />
		<item>
		<title>MasterRaplace &#8211; Manipulação de Arquivos</title>
		<link>http://codeerror.wordpress.com/2009/11/12/masterraplace-manipulacao-de-arquivos/</link>
		<comments>http://codeerror.wordpress.com/2009/11/12/masterraplace-manipulacao-de-arquivos/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 18:14:45 +0000</pubDate>
		<dc:creator>codeerror</dc:creator>
				<category><![CDATA[Java Dicas]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[Códigos]]></category>
		<category><![CDATA[Hexadecimal]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Jar]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Manipulação de Arquivo]]></category>
		<category><![CDATA[MasterReplace]]></category>
		<category><![CDATA[Tradução]]></category>

		<guid isPermaLink="false">http://codeerror.wordpress.com/?p=214</guid>
		<description><![CDATA[MasterReplace, é um projeto swing sem nenhuma utilidade aparente. Sua única utilidade, ao menos para mim, é educativa, visando aprender e treinar além de um pouco de Orientação à Objetos, também a manipulação de arquivos.
Este programa altera letras, palavras ou textos em arquivos de texto, convertendo entre sí códigos de base HEXA, HTML ou ALPHA.
Um [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=214&subd=codeerror&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>MasterReplace</strong>, é um projeto swing sem nenhuma utilidade aparente. Sua única utilidade, ao menos para mim, é <span style="text-decoration:underline;">educativa</span>, visando aprender e treinar além de um pouco de Orientação à Objetos, também a manipulação de arquivos.</p>
<p>Este programa altera letras, palavras ou textos em <strong>arquivos de texto</strong>, convertendo entre sí códigos de base <strong>HEXA</strong>, <strong>HTML</strong> ou <strong>ALPHA</strong>.<br />
Um exemplo mais prático:</p>
<p>Supondo que eu possua um arquivo de 500 mil linhas, e em vários lugares deste arquivo existem letras acentuadas (á, ç, õ, etç), porém eu preciso destas letra em html (&amp;Acute, &amp;ccedil, etç), então eu seleciono um arquivo, escolho as opções <strong>&#8220;De Alpha&#8221;</strong> e <strong>&#8220;Para HTML&#8221;</strong>, e o programa se vira fazendo as alterações necessárias, sem perder nenhuma outra informação do arquivo.<br />
<img src="http://sites.google.com/site/codeerrorbackground/master_raplace_1.JPG" alt="Imagem da aba de tradução de arquivos, do projeto MasterReplace." /></p>
<p>Existe também a possibilidade de &#8220;traduzir&#8221; trechos de texto, em outra aba é possível digitar um texto qualquer, abaixo é possível selecionar &#8220;DE&#8221; e &#8220;PARA&#8221;, e na mesma caixa de texto o programa efetua a tradução.<br />
<img src="http://sites.google.com/site/codeerrorbackground/master_raplace_2.JPG" alt="Imagem da aba de tradução de textos, do projeto MasterReplace" /></p>
<p>Apesar desta  aparente &#8220;inutilidade&#8221;, o programa serve como exemplo para muitas outras coisas, principalmente para manipulação de arquivos, que será o foco dos próximos posts relacionados.</p>
<p>Downloads:</p>
<p><a title="Aplicação executável." href="http://sites.google.com/site/codeerrorbackground/MasterReplace.jar">JAR </a>(projeto executável &#8211; Java 6)<br />
<a title="Fontes do projeto Master Replace" href="http://sites.google.com/site/codeerrorbackground/MasterReplace.rar">RAR </a>(fontes do projeto &#8211; Java 6)</p>
<p>OBS.: Para executar o jar, digite no prompt de comando <strong>&#8220;java -jar ARQUIVO&#8221;</strong>, substituindo obviamente a palavra <strong>&#8220;ARQUIVO&#8221; </strong>pelo caminho e/ou nome do arquivo.</p>
Posted in Java Dicas, Swing Tagged: Códigos, Hexadecimal, HTML, Jar, Java, Manipulação de Arquivo, MasterReplace, Swing, Tradução <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeerror.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeerror.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeerror.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeerror.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeerror.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeerror.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeerror.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeerror.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeerror.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeerror.wordpress.com/214/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=214&subd=codeerror&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://codeerror.wordpress.com/2009/11/12/masterraplace-manipulacao-de-arquivos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02b68ef9d46353bdc2a23741b35cf1ac?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">codeerror</media:title>
		</media:content>

		<media:content url="http://sites.google.com/site/codeerrorbackground/master_raplace_1.JPG" medium="image">
			<media:title type="html">Imagem da aba de tradução de arquivos, do projeto MasterReplace.</media:title>
		</media:content>

		<media:content url="http://sites.google.com/site/codeerrorbackground/master_raplace_2.JPG" medium="image">
			<media:title type="html">Imagem da aba de tradução de textos, do projeto MasterReplace</media:title>
		</media:content>
	</item>
		<item>
		<title>Swing: &#205;cone na &#225;rea de notifica&#231;&#227;o</title>
		<link>http://codeerror.wordpress.com/2009/09/29/swing-icone-na-area-de-notificacao/</link>
		<comments>http://codeerror.wordpress.com/2009/09/29/swing-icone-na-area-de-notificacao/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 19:38:53 +0000</pubDate>
		<dc:creator>codeerror</dc:creator>
				<category><![CDATA[Java Dicas]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[ActionEvent]]></category>
		<category><![CDATA[actionListener]]></category>
		<category><![CDATA[Area de Notificação]]></category>
		<category><![CDATA[Bandeja do Sistema]]></category>
		<category><![CDATA[MenuItem]]></category>
		<category><![CDATA[PopupMenu]]></category>
		<category><![CDATA[SystemTray]]></category>
		<category><![CDATA[Tray]]></category>
		<category><![CDATA[TrayIcon]]></category>
		<category><![CDATA[WindowAdapter]]></category>
		<category><![CDATA[WindowEvent]]></category>
		<category><![CDATA[WindowListener]]></category>

		<guid isPermaLink="false">http://codeerror.wordpress.com/?p=209</guid>
		<description><![CDATA[Aviso: Este post é quase um livro!
Algum tempo atraz, mas precisamente na matéria sobre WindowListener, comentei sobre a lógica necessária para enviar uma Janela Swing para a bandeja do sistema, ou Area de Notificação, ou SystemTray, ou como você gosta de chamar aquele cantinho inferior direito, ao lado do relógio, onde fica um aglomerado de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=209&subd=codeerror&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong><span style="text-decoration:underline;"><span style="color:#ff0000;">Aviso: Este post é quase um livro!</span></span></strong></p>
<p>Algum tempo atraz, mas precisamente na matéria sobre <a title="WindowListener" href="http://codeerror.wordpress.com/2009/07/03/swing-windowlistener/" target="_blank">WindowListener</a>, comentei sobre a lógica necessária para enviar uma Janela <em>Swing</em> para a bandeja do sistema, ou Area de Notificação, ou SystemTray, ou como você gosta de chamar aquele cantinho inferior direito, ao lado do relógio, onde fica um aglomerado de ícones que as vezes nem conhecemos.</p>
<p>Teoricamente tudo é facil, o difícil é apenas implementar a solução ao nosso projeto já finalizado&#8230;<br />Mas vamos parar no pensamento que &#8220;tudo é facil&#8221;, e seguir em frente com este tutorial que ficou bem grande, e é quase todo código!</p>
<p>Primeiro vamos à lógica necessária:<br />Se você deseja enviar uma janela para a bandeja do sistema, desista, você nunca vai conseguir isso (ao menos em java), missão impossível.<br />O que podemos fazer é uma pequena &#8220;gambiarra&#8221;, invisível aos olhos de meros mortais.<br />Essa &#8220;POG&#8221; consiste em:</p>
<p><span style="color:#008080;"><strong>1º</strong> &#8211; Capturar o evento &#8220;<strong>MINIMIZAR</strong>&#8221; ou &#8220;<strong>FECHAR</strong>&#8221; ou qualquer outra porcaria que você queira.<br /><strong>2º</strong> &#8211; Deixar a janela que foi minimizada <strong>INVISÍVEL</strong>!<br /><strong>3º</strong> &#8211; Instanciar uma nova classe que coloca um icone bonitinho ao lado do relógio.<br /><strong>4º</strong> &#8211; Colocar um menu flutuante nesse icone (Menu Popup)<br /><strong>5º</strong> &#8211; Capturar os eventos de click nos itens deste menu<br /><strong>6º </strong>- Caso o item selecionado seja &#8220;Abrir novamente a jenela principal&#8221; deve-se deixar o frame principal <strong>VISIVEL</strong> novamente e &#8220;<strong>matar</strong>&#8221; as variáveis utilizadas para criar o icone bonitinho ao lado do relógio.</span></p>
<p><span id="more-209"></span>
<p>Viu que legal? Não se envia uma janela para o relógio, mas engana-se o usuário deixando a janela invisível e criando OUTRA janela sem corpo, apenas com um icone e um menu Popup!</p>
<p>Agora que já estamos com a faca e o queijo na mão, vamos ao que interessa!</p>
<p>Antes de mais nada, precisamos de uma janela, para que esta seja minimizada, então vamos criar uma classe chamada &#8220;<em>Janelinha</em>&#8220;, conforme exemplo:</p>
<p style="padding-left:30px;"><span style="color:#800080;"><strong>package</strong> </span>br.teste.area.notificacao;</p>
<p style="padding-left:30px;"><strong><span style="color:#800080;">import</span></strong> java.awt.event.WindowAdapter;<br /><strong><span style="color:#800080;">import</span></strong> java.awt.event.WindowEvent;<br /><strong><span style="color:#800080;">import</span></strong> javax.swing.WindowConstants;</p>
<p style="padding-left:30px;"><strong><span style="color:#800080;">public class</span></strong> Janelinha extends javax.swing.JFrame {<br />&nbsp;<br />&nbsp;<strong><span style="color:#800080;">static</span></strong> AreaNotificacao <span style="color:#3366ff;">an </span>= <strong><span style="color:#800080;">null</span></strong>;<br />&nbsp;<strong><span style="color:#800080;">static</span></strong> Janelinha <span style="color:#3366ff;">j</span> = <strong><span style="color:#800080;">null</span></strong>;</p>
<p style="padding-left:30px;">&nbsp;<strong><span style="color:#800080;">public static void</span></strong> main(String[] args) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3366ff;">j</span> = <strong><span style="color:#800080;">new</span></strong> Janelinha();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#3366ff;">j</span>.setVisible(<span style="color:#800080;"><strong>true</strong></span>);&nbsp; <br /> }<br />&nbsp;<br />&nbsp;<strong><span style="color:#800080;">public</span></strong> Janelinha() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">super</span></strong>(<span style="color:#0000ff;">&#8220;Oi, me minimiza&#8230;&#8221;</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; constroiJanelinha();<br /> }<br />&nbsp;<br />&nbsp;<strong><span style="color:#800080;">private void</span></strong> constroiJanelinha() {<br />&nbsp; <strong><span style="color:#800080;">try</span></strong> {<br />&nbsp;&nbsp; setDefaultCloseOperation(WindowConstants.<em><span style="color:#0000ff;">DISPOSE_ON_CLOSE</span></em>);<br />&nbsp;&nbsp; setLocationRelativeTo(<strong><span style="color:#800080;">null</span></strong>);<br />&nbsp;&nbsp; pack();<br />&nbsp;&nbsp; setSize(<span style="color:#ff6600;">200</span>, <span style="color:#ff6600;">50</span>);<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; <em><span style="color:#339966;">//Listener que capitura o evento &#8220;minimizar&#8221;<br /></span></em>&nbsp;&nbsp; addWindowListener(<br />&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">new</span></strong> WindowAdapter(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">public void</span></strong> windowIconified(WindowEvent evnt){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#339966;"><em>//Deixa a janela atual (Janelinha) invisível!<br /></em></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setVisible(<strong><span style="color:#800080;">false</span></strong>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#339966;"><em>//Instancia a classe responsável pelo ícone na área de notificação.<br /></em></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getAreaNotificacao();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; );<br />&nbsp;&nbsp; <br />&nbsp; } <strong><span style="color:#800080;">catch</span></strong> (Exception e) {<br />&nbsp;&nbsp; e.printStackTrace();<br />&nbsp; }<br /> }</p>
<p><strong><span style="color:#800080;">void</span></strong> getAreaNotificacao(){<br />&nbsp; <strong><span style="color:#800080;">if</span></strong>(<span style="color:#3366ff;">an</span> == <strong><span style="color:#800080;">null</span></strong>){<br />&nbsp;&nbsp; <span style="color:#3366ff;">an</span> = <strong><span style="color:#800080;">new</span></strong> AreaNotificacao();<br />&nbsp; }<br /> }</p>
<p style="padding-left:30px;">}</p>
<p>Esta é a classe principal que na verdade é nossa coadjuvante, só servirá para ser minimizada.<br />Repare no WindowListener, o que ele faz&#8230;<br />No WindowListener, estamos deixando o frame invisível <em><span style="color:#993300;">&#8220;setVisible(false)&#8221;</span></em>, na verdade ele continua vivinho da silva, a memória ocupada, o processamento em alta, execução de processos à todo vapor, porém não está visivel.<br />Após esta poção da invisibilidade, está sendo chamado o método interno <span style="color:#993300;"><em>&#8220;getAreaNotificacao()&#8221;</em></span>, e sua única finalidade é instanciar a classe <strong>&#8220;AreaNotificacao&#8221;</strong>, e é nesta classe que a mágica vai acontecer!</p>
<p><strong>IMPORTANTE</strong>: Repare também que as duas principais variáveis desta classe são <strong>static</strong>! Mas por que isso? A resposta na prática está logo abaixo, a resposta na teoria é simples, essas duas variáveis serão <strong><span style="text-decoration:underline;">únicas</span></strong> em toda a aplicação, e precisam ser acessadas por outra janela (a classe AreaNotificacao), quando a classe AreaNotificacao for acessar estes objetos, precisamos ter certeza que eles são os mesmos objetos/variáveis/referências utilizados pela classe Janelinha, caso contrário a mágica não será tão boa.</p>
<p>Agora, vamos à classe secundária que na verdade é nossa protagonista.</p>
<p style="padding-left:30px;"><span style="color:#800080;"><strong>package</strong> </span>br.teste.area.notificacao;</p>
<p style="padding-left:30px;"><strong><span style="color:#800080;">import</span></strong> java.awt.AWTException;<br /><strong><span style="color:#800080;">import</span></strong> java.awt.Image;<br /><strong><span style="color:#800080;">import</span></strong> java.awt.MenuItem;<br /><strong><span style="color:#800080;">import</span></strong> java.awt.PopupMenu;<br /><strong><span style="color:#800080;">import</span></strong> java.awt.SystemTray;<br /><strong><span style="color:#800080;">import</span></strong> java.awt.TrayIcon;<br /><strong><span style="color:#800080;">import</span></strong> java.awt.event.ActionEvent;<br /><strong><span style="color:#800080;">import</span></strong> java.awt.event.ActionListener;<br /><strong><span style="color:#800080;">import</span></strong> java.net.URL;</p>
<p style="padding-left:30px;"><strong><span style="color:#800080;">import</span></strong> javax.swing.ImageIcon;<br /><strong><span style="color:#800080;">import</span></strong> javax.swing.JFrame;<br /><strong><span style="color:#800080;">import</span></strong> javax.swing.JOptionPane;</p>
<p style="padding-left:30px;">
<p style="padding-left:30px;"><strong><span style="color:#800080;">public class</span></strong> AreaNotificacao {</p>
<p style="padding-left:30px;">&nbsp;<span style="color:#339966;"><em>//Criação da icone, instancia da classe java java.awt.TrayIcon<br /></em></span>&nbsp;<strong><span style="color:#800080;">static</span></strong> TrayIcon <span style="color:#0000ff;"><em>trayIcon</em> </span>= <strong><span style="color:#800080;">null</span></strong>;<br />&nbsp;<br />&nbsp;<em><span style="color:#339966;">//Referencia à instancia &#8220;J&#8221; da classe Janelinha, para acesso da bandeja.<br /></span></em>&nbsp;<strong><span style="color:#800080;">static</span></strong> Janelinha <em><span style="color:#0000ff;">pai</span></em> = Janelinha.<em><span style="color:#0000ff;">j</span></em>;<br />&nbsp;<br />&nbsp;<em><span style="color:#339966;">//Construtor, que será chamado quando a classe for instanciada</span></em><br /> AreaNotificacao() {<br />&nbsp; <strong><span style="color:#800080;">super</span></strong>();<br />&nbsp; criaAreaNotificacao();<br /> }<br />&nbsp;<br />&nbsp;<strong><span style="color:#800080;">static void</span></strong> criaAreaNotificacao(){<br />&nbsp; <br /><em><span style="color:#339966;">&nbsp; //Verifica se não é possível trabalhar com &#8220;TrayIcon&#8221;<br /></span></em>&nbsp; <strong><span style="color:#800080;">if</span></strong> (!SystemTray.isSupported()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<em><span style="color:#0000ff;">out</span></em>.println(<span style="color:#0000ff;">&#8220;Não dá pra fazer, nem tenta!&#8221;</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">return</span></strong>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp; <br />&nbsp; <em><span style="color:#339966;">//Instanciação de um objeto java.awt.PopupMenu<br /></span></em>&nbsp; <strong><span style="color:#800080;">final</span></strong> PopupMenu pop = <strong><span style="color:#800080;">new</span></strong> PopupMenu();<br />&nbsp; <em><span style="color:#339966;">//Instanciação do objeto java.awt.SystemTray;<br /></span></em>&nbsp; <strong><span style="color:#800080;">final</span></strong> SystemTray tray = SystemTray.getSystemTray();<br />&nbsp; <em><span style="color:#339966;">//Criação do objeto TrayIcon, informando uma imagem e um título<br /></span></em>&nbsp; <em><span style="color:#0000ff;">trayIcon</span></em> = <strong><span style="color:#800080;">new</span></strong> TrayIcon(createImage(<span style="color:#0000ff;">&#8220;padraoTray.jpg&#8221;</span>,<span style="color:#0000ff;"> &#8220;É nois!!&#8221;</span>));<br />&nbsp; <br />&nbsp; <em><span style="color:#339966;">//Criação dos itens do Menu Popup<br /></span></em>&nbsp; MenuItem item_1 = <strong><span style="color:#800080;">new</span></strong> MenuItem(<span style="color:#0000ff;">&#8220;111111&#8243;</span>);<br />&nbsp; MenuItem item_2 = <strong><span style="color:#800080;">new</span></strong> MenuItem(<span style="color:#0000ff;">&#8220;222222&#8243;</span>);<br />&nbsp; MenuItem item_3 = <strong><span style="color:#800080;">new</span></strong> MenuItem(<span style="color:#0000ff;">&#8220;333333&#8243;</span>);<br />&nbsp; MenuItem item_4 = <strong><span style="color:#800080;">new</span></strong> MenuItem(<span style="color:#0000ff;">&#8220;444444&#8243;</span>);<br />&nbsp; MenuItem item_5 = <strong><span style="color:#800080;">new</span></strong> MenuItem(<span style="color:#0000ff;">&#8220;-sair-&#8221;</span>);<br />&nbsp; <br />&nbsp; <em><span style="color:#339966;">//Adicionando os itens ao Menu Popup<br /></span></em>&nbsp; pop.add(item_1);<br />&nbsp; pop.add(item_2);<br />&nbsp; <em><span style="color:#339966;">//Separador (linha que separa os itens no menu)<br /></span></em>&nbsp; pop.addSeparator();<br />&nbsp; pop.add(item_3);<br />&nbsp; pop.add(item_4);<br />&nbsp; <em><span style="color:#339966;">//Separador (linha que separa os itens no menu)<br /></span></em>&nbsp; pop.addSeparator();<br />&nbsp; pop.add(item_5);<br />&nbsp; <br />&nbsp; <em><span style="color:#339966;">//Setando o menu padrão no TrayIcon, que por acaso é este logo acima.<br /></span></em>&nbsp; <span style="color:#0000ff;"><em>trayIcon</em></span>.setPopupMenu(pop);<br />&nbsp; <br />&nbsp; <em><span style="color:#339966;">//Adicionando o Icone na Area de Notificação, como o menu já está dentro do ícone,<br />&nbsp; //irá junto também.</span></em><br />&nbsp; <strong><span style="color:#800080;">try</span></strong> {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tray.add(<em><span style="color:#0000ff;">trayIcon</span></em>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <strong><span style="color:#800080;">catch</span></strong> (AWTException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(<span style="color:#0000ff;">&#8220;Não deu pra fazer isso&#8230;&#8221;</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">return</span></strong>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><em><span style="color:#339966;">//Ação do botão &#8220;item_1&#8243;<br /></span></em>&nbsp; item_1.addActionListener(<strong><span style="color:#800080;">new</span></strong> ActionListener(){<br />&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">public void</span></strong> actionPerformed(ActionEvent e) {<br />&nbsp;&nbsp;&nbsp;&nbsp; <em><span style="color:#339966;">//Simplesmente deixa-se a janela visível novamente.<br /></span></em>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#0000ff;"><em>pai</em></span>.setVisible(<strong><span style="color:#800080;">true</span></strong>);<br />&nbsp;&nbsp;&nbsp;&nbsp; <em><span style="color:#339966;">//Esta linha deixa a janela sobre as outras, caso ela apareça minimizada.<br /></span></em>&nbsp;&nbsp;&nbsp;&nbsp; <em><span style="color:#0000ff;">pai</span></em>.setExtendedState(JFrame.<em><span style="color:#0000ff;">NORMAL</span></em>);</p>
<p><strong><span style="color:#800080;">try</span></strong> {<br />&nbsp;&nbsp;&nbsp; <em><span style="color:#339966;"> //Agora basta remover (ou esconder) o ícone da Área de Notificação<br /></span></em>&nbsp;&nbsp;&nbsp;&nbsp; tray.remove(<em><span style="color:#0000ff;">trayIcon</span></em>);<br />&nbsp;&nbsp;&nbsp;&nbsp; <em><span style="color:#0000ff;">trayIcon</span> </em>= <strong><span style="color:#800080;">null</span></strong>;<br />&nbsp;&nbsp;&nbsp;&nbsp; <em><span style="color:#339966;">//Limpando a referência ao Systemtray da classe Janelinha<br /></span></em>&nbsp;&nbsp;&nbsp;&nbsp; <em><span style="color:#0000ff;">pai</span></em>.<em><span style="color:#0000ff;">an</span></em>.finalize();<br />&nbsp;&nbsp;&nbsp; } <strong><span style="color:#800080;">catch</span></strong> (Throwable e1) {<br />&nbsp;&nbsp;&nbsp;&nbsp; e1.printStackTrace();<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; });<br />&nbsp; <br />&nbsp; <em><span style="color:#339966;">//Ação do botão &#8220;item_2&#8243;<br /></span></em>&nbsp; item_2.addActionListener(new ActionListener(){<br />&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">public void</span></strong> actionPerformed(ActionEvent e) {<br />&nbsp;&nbsp;&nbsp;&nbsp; JOptionPane.showMessageDialog(<strong><span style="color:#800080;">null</span></strong>, <span style="color:#0000ff;">&#8220;Você clicou no item 2&#8243;</span>);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; });<br />&nbsp; <br />&nbsp; <em><span style="color:#339966;">//Ação do botão &#8220;item_3&#8243;<br /></span></em>&nbsp; item_3.addActionListener(new ActionListener(){<br />&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">public void</span></strong> actionPerformed(ActionEvent e) {<br />&nbsp;&nbsp;&nbsp;&nbsp; JOptionPane.showMessageDialog(<strong><span style="color:#800080;">null</span></strong>, <span style="color:#0000ff;">&#8220;Você clicou no item 3&#8243;</span>);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; });<br />&nbsp; <br />&nbsp; <em><span style="color:#339966;">//Ação do botão &#8220;item_4&#8243;<br /></span></em>&nbsp; item_4.addActionListener(new ActionListener(){<br />&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">public void</span></strong> actionPerformed(ActionEvent e) {<br />&nbsp;&nbsp;&nbsp;&nbsp; JOptionPane.showMessageDialog(<strong><span style="color:#800080;">null</span></strong>, <span style="color:#0000ff;">&#8220;Você clicou no item 4&#8243;</span>);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; });<br />&nbsp; <br />&nbsp; <em><span style="color:#339966;">//Ação do botão &#8220;item_5&#8243;<br /></span></em>&nbsp; item_5.addActionListener(new ActionListener(){<br />&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">public void</span></strong> actionPerformed(ActionEvent e) {<br />&nbsp;&nbsp;&nbsp;&nbsp; JOptionPane.showMessageDialog(<strong><span style="color:#800080;">null</span></strong>, <span style="color:#0000ff;">&#8220;Você clicou no item 5, este item é proibido, agora a aplicação terá que ser encerrada!!!&#8221;</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp; JOptionPane.showMessageDialog(<strong><span style="color:#800080;">null</span></strong>, <span style="color:#0000ff;">&#8220;Escondam-se todos!!!!!&#8221;</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp; System.<em>exit</em>(0);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; });</p>
<p>}</p>
<p><strong><span style="color:#800080;">protected static</span></strong> Image createImage(String path, String description) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL imageURL = AreaNotificacao.<strong><span style="color:#800080;">class</span></strong>.getResource(path);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">if</span></strong> (imageURL == <strong><span style="color:#800080;">null</span></strong>) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<span style="color:#0000ff;">err</span>.println(<span style="color:#0000ff;">&#8220;Caminho não encontrado: &#8220;</span> + path);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">return null</span></strong>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color:#800080;">return</span></strong> (<strong><span style="color:#800080;">new</span></strong> ImageIcon(imageURL, description)).getImage();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>Toda a explicação aparentemente necessária está nos comentários ca classe, porém vamos à algumas observações.<br />Antes de executar qualquer coisa, e ocupar espaço à toa na memória, é feita uma verificação na JVM <em><span style="color:#993300;">&#8220;if(!SystemTray.isSupported())&#8221;</span></em>, se ela não suportar trabalhar com a classe SystemTray, então a brincadeira acaba.</p>
<p>Após isso são criados o Menu Popup e seus Itens, que no final ficam com essa cara:<br /><img alt="Imagem da classe AreaNotificacao em a&ccedil;&atilde;o, com o menu Popup sendo acessado" src="http://codeerror.background.googlepages.com/SystemTray_1.JPG"></p>
<p>Com o Icone criado, e o Menu Popup Definido, é hora de colocar o bolo para assar, isso está sendo feito logo após a inclusão dos itens no menu, primeiro definindo o Menu Padrão do Icone <em><span style="color:#993300;">&#8220;trayIcon.setPopupMenu(pop)&#8221;</span></em>, e depois, dentro do bloclo TRY-CATCH o ícone está sendo inserido na Bandeja do Sistema <em><span style="color:#993300;">&#8220;tray.add(trayIcon)&#8221;</span></em>.</p>
<p>Está tudo funcionando, tudo muito bonito, mas os itens precisão de ações não é mesmo?<br />As ações que merecem um comentário em especial são as do <strong>item_1</strong> e do <strong>item_5</strong>.</p>
<p>Na ação do <strong>item_1</strong>, que neste caso está exibindo a janela principal novamente, deve-se impreterivelmente remover e/ou limpar as variáveis responsáveis pelo Icone na Bandeja do Sistema, caso contrário em cada minimizada um novo ícone será criado e cedo ou tarde seu computador vai gritar pedindo socorro.<br />É possível notar também o acesso às variáveis/objetos estáticos (static) da classe Janelinha, definindo novos comportamentos para eles.</p>
<p>Na ação do item_5 é realizado um <em>&#8220;salve-se quem puder&#8221;</em>, mais conhecido como <em>&#8220;System.exit(0)&#8221;</em> que encerra a aplicação inteira, ou seja, tudo que estiver no mesmo espaço da JVM será encerrado, o ícone na bandeja e a propria &#8220;Janelinha&#8221;.</p>
<p>Acha que isso é tudo? Isso é só o começo!<br />Não poderia ser tão simples (a nível de conteúdo), queremos mais!</p>
<p>É possível entrar para o clube dos chatos e ficar exibindo aqueles balõezinhos que incomodam à todos.<br /><img alt="Imagem do bal&atilde;o de avisos." src="http://codeerror.background.googlepages.com/SystemTray_2.JPG"></p>
<p>Para fazer essa mensagem chata, basta em algum momento, chamar a seguinte linha:<br /><em>trayIcon.displayMessage(<strong><span style="color:#ff0000;">&#8220;Titulo&#8221;</span></strong>, </em><strong><span style="color:#ff0000;">&#8220;Mensagem&#8221;</span></strong><em>, <strong><span style="color:#ff0000;">tipo</span></strong>);</em></p>
<p>Trocando <span style="color:#ff0000;"><em>&#8220;Título&#8221;</em><span style="color:#000000;"> e </span><em>&#8220;Mensagem&#8221;</em></span>, obviamente pelos títulos e mensagens que serão exibidos no balão, e <strong><span style="color:#ff0000;">tipo</span></strong> por um dos seguintes tipos de mensagens:</p>
<p style="padding-left:30px;">TrayIcon.MessageType.ERROR<br />TrayIcon.MessageType.WARNING<br />TrayIcon.MessageType.INFO<br />TrayIcon.MessageType.NONE</p>
<p>Exemplos:</p>
<p style="padding-left:30px;">trayIcon.displayMessage(<br /> &#8220;Atenção&#8221;,<br /> &#8220;Perigo de causar o fim do mundo!&#8221;,<br /> TrayIcon.MessageType.WARNING);</p>
<p style="padding-left:30px;">trayIcon.displayMessage(<br /> &#8220;Alerta Vermelho!&#8221;,<br /> &#8220;Este é um alerta de que o mundo está acabando&#8221;,<br /> TrayIcon.MessageType.ERROR);</p>
<p>Agora que a parte facil já está aprendida, ou ao menos subentendida, agora é hora de partir para a parte difícil, adaptar a solução à um programa finalizado, mas para ajudar um pouco mais segue o link das classes de exemplo, utilizadas neste tutorial. Basta colocá-las no mesmo pacote e executar a classe &#8220;Janelinha&#8221;.</p>
<p><a href="http://codeerror.background.googlepages.com/Janelinha.java" target="_blank">Janelinha.java</a><br /><a href="http://codeerror.background.googlepages.com/AreaNotificacao.java" target="_blank">AraNotificacao.java</a><br /><a href="http://codeerror.background.googlepages.com/padraoTray.jpg" target="_blank">padraoTray.jpg</a></p>
<p>Boa sorte!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="padding-left:30px;">
Posted in Java Dicas, Swing Tagged: ActionEvent, actionListener, Area de Notificação, Bandeja do Sistema, MenuItem, PopupMenu, SystemTray, Tray, TrayIcon, WindowAdapter, WindowEvent, WindowListener <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeerror.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeerror.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeerror.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeerror.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeerror.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeerror.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeerror.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeerror.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeerror.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeerror.wordpress.com/209/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=209&subd=codeerror&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://codeerror.wordpress.com/2009/09/29/swing-icone-na-area-de-notificacao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02b68ef9d46353bdc2a23741b35cf1ac?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">codeerror</media:title>
		</media:content>

		<media:content url="http://codeerror.background.googlepages.com/SystemTray_1.JPG" medium="image">
			<media:title type="html">Imagem da classe AreaNotificacao em a&#231;&#227;o, com o menu Popup sendo acessado</media:title>
		</media:content>

		<media:content url="http://codeerror.background.googlepages.com/SystemTray_2.JPG" medium="image">
			<media:title type="html">Imagem do bal&#227;o de avisos.</media:title>
		</media:content>
	</item>
		<item>
		<title>WebService, simples assim &#8211; Parte 4</title>
		<link>http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-4/</link>
		<comments>http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-4/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 19:20:53 +0000</pubDate>
		<dc:creator>codeerror</dc:creator>
				<category><![CDATA[Java Dicas]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[WebService]]></category>
		<category><![CDATA[Axis]]></category>
		<category><![CDATA[Call]]></category>
		<category><![CDATA[Cliente]]></category>
		<category><![CDATA[JWS]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-4/</guid>
		<description><![CDATA[Realizando um teste básico
O Axis aceita que um Web Service seja chamado via uma requisição HTTP-GET. Portanto, ao digitar um endereço é possível testar o web service. No exemplo deste artigo o endereço é este: http://localhost:8080/axis/Servico.jws?method=soma&#38;valor1=2&#38;valor2=4 . 
Como pode-se notar, o endereço é a junção de um namespace, que é o endereço do WebService representado [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=207&subd=codeerror&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Realizando um teste básico</h4>
<p>O Axis aceita que um Web Service seja chamado via uma requisição HTTP-GET. Portanto, ao digitar um endereço é possível testar o web service. No exemplo deste artigo o endereço é este: <strong>http://localhost:8080/axis/Servico.jws?<font color="#ff0000">method</font>=soma&amp;<font color="#ff0000">valor1</font>=2&amp;<font color="#ff0000">valor2</font>=4 . </strong>
<p>Como pode-se notar, o endereço é a junção de um <strong>namespace</strong>, que é o endereço do WebService representado por http://localhost:8080/axis/Servico.jws , a variável method que, como seu nome diz, contém o nome do método que se deseja executar, e uma sequência dos parâmetros deste método. Lembrando que o nome dos parâmetros deve ser o mesmo definido na função da classe.
<p>O resultado da execução é um documento XML com a resposta 6 . Novamente, dependendo do browser não será visivel as tags XML. O XML que retornou na execução está abaixo:
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />&lt;soapenv:Envelope <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:soapenv=&#8221;http://schemas.xmlsoap.org/soap/envelope/&#8221; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsd=&#8221;http://www.w3.org/2001/XMLSchema&#8221; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;&gt;<br />&lt;soapenv:Body&gt;<br />&lt;somaResponse soapenv:encodingStyle=&#8221;http://schemas.xmlsoap.org/soap/encoding/&#8221;&gt;<br />&lt;somaReturn xsi:type=&#8221;xsd:int&#8221;&gt;<font color="#ff0000"><strong>6</strong></font>&lt;/somaReturn&gt;<br />&lt;/somaResponse&gt;<br />&lt;/soapenv:Body&gt;<br />&lt;/soapenv:Envelope&gt;</p>
<h4>Criando um cliente em Java para acessar o Servidor</h4>
<p>O cliente também é uma classe simples, mas exige conhecimento em algumas classes não tão comuns no dia-a-dia.
<p>As classes Service e Call são classes do Axis , portanto, para compilar e executar esta classe é necessário que todo o diretório lib, encontrado dentro do zip do Axis esteja no CLASSPATH da aplicação.
<p>Visto este detalhe, abaixo encontra-se o arquivo fonte do cliente de Web Service. Esta classe fará a conexão ao Web Service para somar 2 com 4 e irá apresentar o resultado 6 na saída padrão.
<p><strong><font color="#800040">import</font>&nbsp;</strong>org.apache.axis.client.Service;<br /><strong><font color="#800040">import</font>&nbsp;</strong>org.apache.axis.client.Call;<br /><strong><font color="#800040">public class</font>&nbsp;</strong>Cliente {<br /><strong>&nbsp;&nbsp;&nbsp;&nbsp; <font color="#800040">public static void</font>&nbsp;</strong>main(String[] args) <strong><font color="#800040">throws</font>&nbsp;</strong>Exception {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008040"><em>// Endereço, local onde encontra-se o Web Service<br /></em></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String local = <font color="#0000ff">&#8220;http://localhost:8080/axis/Servico.jws&#8221;</font>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008040"><em> // Criando e configurando o serviço<br /></em></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call call = (Call) <strong><font color="#800040">new</font>&nbsp;</strong>Service().createCall();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008040"><em> // Configurando o endereço.<br /></em></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call.setTargetEndpointAddress(local);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008040"><em>// Marcando o método a ser chamado. <br /></em></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call.setOperationName(<font color="#0000ff">&#8220;soma&#8221;</font>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008040"><em>// Parâmetros da função soma.<br /></em></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object[] param = <strong><font color="#800040">new</font>&nbsp;</strong>Object[]{<strong><font color="#800040">new</font>&nbsp;</strong>Integer(2),new Integer(4)};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008040"><em> // Retorno da Função<br /></em></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer ret = (Integer)call.invoke(param);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#008040"><em> // Imprime o resultado: ret = 2 + 4.<br /></em></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(<font color="#0000ff">&#8220;Resultado da soma : &#8220;</font> + ret);<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />}
<p>Este código está dentro de um arquivo chamado <strong>Cliente.java</strong>, após compilar e executar esta classe exibirá o resultado <strong><font color="#ff0000">&#8221; Resultado da soma: 6 &#8220;</font></strong> como desejado.
<p>O framework do Axis trata a primitiva <strong>int</strong> e a classe wrapper <strong>Integer </strong>como sendo iguais. Portanto, tanto faz usar uma ou outra. Neste exemplo, foi criado o Web Service com dois parâmetros int e aqui no cliente estamos usando dois parâmetros Integer .
<p>Como pode-se notar, o framework do Axis abstrai qualquer trabalho com XML, evitando que o desenvolvedor necessite conhecer a sintaxe do XML do SOAP.
<p>&nbsp;
<p>E com isso, chegamos ao fim deste tutorial, boa sorte no desenvolvimento do seu webservice!</p>
Posted in Java Dicas, Servidores, WebService Tagged: Axis, Call, Cliente, JWS, namespace, Service, SOAP, WebService, XML <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeerror.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeerror.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeerror.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeerror.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeerror.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeerror.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeerror.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeerror.wordpress.com/207/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeerror.wordpress.com/207/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeerror.wordpress.com/207/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=207&subd=codeerror&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02b68ef9d46353bdc2a23741b35cf1ac?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">codeerror</media:title>
		</media:content>
	</item>
		<item>
		<title>WebService, simples assim &#8211; Parte 3</title>
		<link>http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-3/</link>
		<comments>http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-3/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 19:04:49 +0000</pubDate>
		<dc:creator>codeerror</dc:creator>
				<category><![CDATA[Java Dicas]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[WebService]]></category>
		<category><![CDATA[Axis]]></category>
		<category><![CDATA[implementação]]></category>
		<category><![CDATA[JWS]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[webapps]]></category>
		<category><![CDATA[WSDL]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-3/</guid>
		<description><![CDATA[Implementando um Web Service simples
O objetivo é aprender, então será criado um serviço bem simples. O serviço é a soma de duas variáveis inteiras retornando o resultado. Este exemplo poderá servir para qualquer outra implementação. Abaixo está a classe implementada. O nome do arquivo é Servico.java:

public class Servico {&#160;&#160;&#160;&#160;&#160; public int soma(int valor1, int valor2) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=206&subd=codeerror&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h4>Implementando um Web Service simples</h4>
<p>O objetivo é aprender, então será criado um serviço bem simples. O serviço é a soma de duas variáveis inteiras retornando o resultado. Este exemplo poderá servir para qualquer outra implementação. Abaixo está a classe implementada. O nome do arquivo é Servico.java:<br />
<blockquote>
<p><font color="#800040"><b>public</b> <b>class</b></font> Servico {<br /><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#800040">public</font></b><font color="#800040"> <b>int</b></font> soma(<b><font color="#800040">int</font></b> valor1, <b><font color="#800040">int</font></b> valor2) {<br /><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#800040">return</font></b> valor1 + valor2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />}</p>
</blockquote>
<p>Agora só falta disponibilizá-lo no nosso servidor para o mundo acessar. E, para fazer isso, deve-se alterar o nome do arquivo de <strong>Servico.java</strong> para <strong>Servico.jws</strong>, coloca-lo no diretório: <strong>CATALINA_HOME / webapps / axis /</strong> e iniciar o servidor, se ele já não estiver iniciado. Se já estiver iniciado, o seu Web Service está publicado.
<p>Os arquivos. jws são lidos pelo Axis e representam <strong>Java Web Services</strong>. O Axis se baseará nesses arquivos (. jws) para criar os arquivos de definição WSDL. Todos os métodos públicos existentes nessas classes serão automaticamente disponibilizados para terceiros.
<p>Criar documentos <strong>XML</strong> é demorado e, muitas vezes, chato. Gerar o <strong>WSDL</strong> é uma característica muito relevante na escolha de uma implementação de SOAP e o Axis é um dos poucos frameworks que conseguem fazer essa façanha de maneira transparente para o desenvolvedor. É por esse motivo que ele é altamente recomendado na construção de Web Services.
<p>Para acessar o Web Service criado basta abrir um navegador e ir ao endereço: http://localhost:8080/axis/Servico.jws . Da mesma forma que os outros dois Web Services foram vistos, este também terá um link para ver a especificação WSDL, e novamente poderá ser visto ou não dependendo do seu navegador.
<p>O arquivo WSDL da classe Servico ficará como abaixo:
<p><font color="#4f4f4f">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />&lt;wsdl:definitions targetNamespace=&#8221;http://localhost:8080/axis/Servico.jws&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns=&#8221;http://schemas.xmlsoap.org/wsdl/&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:apachesoap=&#8221;http://xml.apache.org/xml-soap&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:impl=&#8221;http://localhost:8080/axis/Servico.jws&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:intf=&#8221;http://localhost:8080/axis/Servico.jws&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:soapenc=&#8221;http://schemas.xmlsoap.org/soap/encoding/&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:wsdl=&#8221;http://schemas.xmlsoap.org/wsdl/&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:wsdlsoap=&#8221;http://schemas.xmlsoap.org/wsdl/soap/&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsd=&#8221;http://www.w3.org/2001/XMLSchema&#8221;&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;wsdl:message name=&#8221;somaRequest&#8221;&gt;&nbsp;&nbsp; <br />&lt;wsdl:part name=&#8221;valor1&#8243; type=&#8221;xsd:int&#8221;/&gt;&nbsp;&nbsp; <br />&lt;wsdl:part name=&#8221;valor2&#8243; type=&#8221;xsd:int&#8221;/&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp; &lt;/wsdl:message&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp; &lt;wsdl:message name=&#8221;somaResponse&#8221;&gt;&nbsp;&nbsp; <br />&lt;wsdl:part name=&#8221;somaReturn&#8221; type=&#8221;xsd:int&#8221;/&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp; &lt;/wsdl:message&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp; &lt;wsdl:portType name=&#8221;Servico&#8221;&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl:operation name=&#8221;soma&#8221; parameterOrder=&#8221;valor1 valor2&#8243;&gt;&nbsp;&nbsp; <br />&lt;wsdl:input message=&#8221;impl:somaRequest&#8221; name=&#8221;somaRequest&#8221;/&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl:output message=&#8221;impl:somaResponse&#8221; name=&#8221;somaResponse&#8221;/&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;/wsdl:operation&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp; &lt;/wsdl:portType&gt;&nbsp;&nbsp; <br />&lt;wsdl:binding name=&#8221;ServicoSoapBinding&#8221; type=&#8221;impl:Servico&#8221;&gt;&nbsp;&nbsp; <br />&lt;wsdlsoap:binding style=&#8221;rpc&#8221; transport=&#8221;http://schemas.xmlsoap.org/soap/http&#8221;/&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl:operation name=&#8221;soma&#8221;&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdlsoap:operation soapAction=&#8221;"/&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl:input name=&#8221;somaRequest&#8221;&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdlsoap:body encodingStyle=&#8221;http://schemas.xmlsoap.org/soap/encoding/&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namespace=&#8221;http://DefaultNamespace&#8221; use=&#8221;encoded&#8221;/&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/wsdl:input&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl:output name=&#8221;somaResponse&#8221;&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdlsoap:body encodingStyle=&#8221;http://schemas.xmlsoap.org/soap/encoding/&#8221;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namespace=&#8221;http://localhost:8080/axis/Servico.jws&#8221; use=&#8221;encoded&#8221;/&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/wsdl:output&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;/wsdl:operation&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp; &lt;/wsdl:binding&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp; &lt;wsdl:service name=&#8221;ServicoService&#8221;&gt;&nbsp;&nbsp; <br />&lt;wsdl:port binding=&#8221;impl:ServicoSoapBinding&#8221; name=&#8221;Servico&#8221;&gt;&nbsp;&nbsp; <br />&lt;wsdlsoap:address location=&#8221;http://localhost:8080/axis/Servico.jws&#8221;/&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;/wsdl:port&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp; &lt;/wsdl:service&gt;&nbsp;&nbsp; <br /> &lt;/wsdl:definitions&gt;&nbsp;&nbsp; </font></p>
<p>&nbsp;</p>
<p>Analisar este arquivo é essencial para entender a profundidade da implementação. Uma das linhas mais importantes para este arquivo é a 19ª linha, onde define-se o nome do método e o nome de seus parâmetros. Eles deverão ser de conhecimento público para que as interfaces cliente consigam se comunicar com o Web Service. </p>
Posted in Java Dicas, Servidores, WebService Tagged: Axis, implementação, JWS, SOAP, webapps, WebService, WSDL, XML <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeerror.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeerror.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeerror.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeerror.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeerror.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeerror.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeerror.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeerror.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeerror.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeerror.wordpress.com/206/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=206&subd=codeerror&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02b68ef9d46353bdc2a23741b35cf1ac?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">codeerror</media:title>
		</media:content>
	</item>
		<item>
		<title>Controle de Acesso</title>
		<link>http://codeerror.wordpress.com/2009/08/30/controle-de-acesso/</link>
		<comments>http://codeerror.wordpress.com/2009/08/30/controle-de-acesso/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 19:50:28 +0000</pubDate>
		<dc:creator>codeerror</dc:creator>
				<category><![CDATA[Java Dicas]]></category>
		<category><![CDATA[abstract]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[controladores de acesso]]></category>
		<category><![CDATA[default]]></category>
		<category><![CDATA[final]]></category>
		<category><![CDATA[Métodos]]></category>
		<category><![CDATA[modificadores de acesso]]></category>
		<category><![CDATA[private]]></category>
		<category><![CDATA[protected]]></category>
		<category><![CDATA[public]]></category>
		<category><![CDATA[variáveis]]></category>

		<guid isPermaLink="false">http://codeerror.wordpress.com/2009/08/30/controle-de-acesso/</guid>
		<description><![CDATA[O que são Controladores ou Modificadores de Acesso?Com certeza você já os viu, aqui mesmo neste blog. O projeto JSF, jReMSN, Hibernate e até mesmo o projeto Webservice estão cheios deles, mas o que são?

default
public
private
protected
final
abstract

Como pode ver, essas são palavras que sempre nos acompanham nas declarações de classes, métodos e variáveis, aqui vamos ver uma [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=205&subd=codeerror&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>O que são Controladores ou Modificadores de Acesso?<br />Com certeza você já os viu, aqui mesmo neste blog. O projeto <a href="http://codeerror.wordpress.com/jsf/" target="_blank">JSF</a>, <a href="http://codeerror.wordpress.com/jremsn/" target="_blank">jReMSN</a>, <a href="http://codeerror.wordpress.com/category/hibernate/" target="_blank">Hibernate</a> e até mesmo o projeto <a href="http://codeerror.wordpress.com/webservice/" target="_blank">Webservice</a> estão cheios deles, mas o que são?</p>
<ul>
<li><font color="#800080"><strong>default</strong></font></li>
<li><strong><font color="#800080">public</font></strong></li>
<li><strong><font color="#800080">private</font></strong></li>
<li><strong><font color="#800080">protected</font></strong></li>
<li><strong><font color="#800080">final</font></strong></li>
<li><strong><font color="#800080">abstract</font></strong></li>
</ul>
<p>Como pode ver, essas são palavras que sempre nos acompanham nas declarações de classes, métodos e variáveis, aqui vamos ver uma breve descrição de cada uma.</p>
<p><span id="more-205"></span>
<p><strong><u>Classes</u></strong><br />Para criar classes, só podemos utilizar dois controladores de acesso, na verdade um controlador (<strong><em>default</em></strong>) e um modificador (<strong><em>public</em></strong>).<br />É possível adicional à declaração da classe, junto com o <strong>public</strong> ou <strong>default</strong>, alguns outros modificadores como <strong>final</strong> e <strong>abstract</strong>.<br />Esses e todos os outros modificadores são acessíveis também à métodos e variáveis.</p>
<p>&nbsp;</p>
<p><strong><font color="#800080">default</font></strong><br />O controlador de acesso <strong>default</strong> é, como o próprio nome diz, padrão, ele está presente em <strong><u>TODAS</u></strong> as classes que não possuam um modificador, ele não é uma palavra que você indica na declaração da classe, na verdade, para utilizá-lo você <u>não deve dizer nada</u> para a classe!<br />Vejamos um exemplo básico:</p>
<blockquote><p><strong><font color="#800080">class</font></strong> MinhaClasse{<br />}</p>
</blockquote>
<p>Viu? Essa classe acima está utilizando o controlador de acesso <strong>default</strong>, esse controlador está presente em todas as classes que não tem uma declaração implícita (<strong>public</strong>), e ele define que esta classe está acessível à todas as classes <font color="#ff0000">DO MESMO PACOTE</font>. Se você tentar instanciar ou extender esta classe de qualquer outra classe do mesmo pacote irá conseguir, porém se tentar fazer isso com uma classe de outro pacote não conseguirá!</p>
<p>&nbsp;</p>
<p><strong><font color="#800080">public</font></strong><br />O modificador de acesso <strong>public</strong> é exatamente isso, um <u>modificador de acesso</u>, quando declaramos uma classe como <strong>public</strong> estamos modificando o acesso, permitindo que todas as classes do projeto, indiferente do pacote consigam enxergar esta classe.<br />Exemplo:</p>
<blockquote><p><strong><font color="#800080">public</font></strong> <strong><font color="#800080">class</font></strong> MinhaClasse{<br />}</p>
</blockquote>
<p>Esta classe acima conseguirá ser <strong>instanciada</strong> ou <strong>extendida</strong> por qualquer outra classe, indiferente do pacote que a instanciadora esteja!</p>
<p>&nbsp;</p>
<p><strong><font color="#800080">final</font></strong><br />O modificador <strong>final</strong> indica que está classe/método/variável termina aqui, esta é a ultima instancia, deste ponto em diante não muda mais!<br />Quando utilizado em classes, o <strong>final</strong> não deixa esta classe ser extendida (herdada), ela pode apenas ser instanciada. Desta forma você garante que os métodos desta classe serão utilizados sempre da mesma forma e nunca serão sobreescritos. </p>
<p>&nbsp;</p>
<p><strong><font color="#800080">abstract</font></strong><br /><strong>Abstract</strong> funciona de forma contrária ao <strong>final</strong>, uma classe <strong>abstract</strong> pode ser herdada, porém nunca poderá ser instanciada, funcionando apenas como <em>&#8220;matéria prima&#8221;</em> para a criação de uma nova subclasse que à extender.<br />A classe <strong>abstract</strong> pode possuir métodos <strong>abstracts</strong>, e estes não precisam possuir conteúdo, apenas a <em>&#8220;assinatura&#8221;</em>, quando um método for marcado como <strong>abstract</strong>, ele deverá obrigatóriamente ser reescrito na subclasse e ai sim irá possuir um conteúdo.<br />Exemplo:</p>
<blockquote><p><strong><font color="#800080">abstract class</font></strong> MinhaClasse{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#800080">public abstract</font> String meuMetodo();<br />}</p>
</blockquote>
<p>Repare que o método não possui conteúdo, nem ao menos possui chaves <strong>&#8220;{}&#8221;</strong>, e termina com ponto-e-vírgula! Que absurdo!<br />Mas não é nenhum absurdo, esse código irá compilar sem problema algum e está 100% correto, isso por que esta é uma classe <strong>abstract</strong> e o método também é um método <strong>abstract</strong>, ou seja a classe só pode ser extendida, e a classe que fizer isso será obrigada a possuir um método com o nome <font color="#0080ff">meuMetodo()</font> e retorno <font color="#0080ff">String</font>.<br />Uma classe <strong>abstract</strong> pode também possuir métodos e variáveis normais, que também serão herdados para as subclasses.</p>
<p>&nbsp;</p>
<p><strong><font color="#800080">private</font></strong><br />Quando você declara um método ou variável como <strong>private</strong>, você o está escondendo do resto do mundo, nenhuma outra classe do seu projeto conseguirá enxergar os métodos e variáveis private, eles só serão acessíveis dentro da própria classe!</p>
<p>&nbsp;</p>
<p><strong><font color="#800080">protected</font></strong><br />Este é o primo de segundo&nbsp; grau do acesso <strong>default</strong>, quando declaramos um método ou variável com acesso <strong>protected</strong> estamos informando que <strong><u><font color="#ff0000">para instancias</font></u></strong>, este método ou variável só está acessível à classes do mesmo pacote (idêntico ao acesso <strong>default</strong>), porém note que eu destaquei o trecho <em>&#8220;para instancias&#8221;</em> e isso tem um motivo, a diferença do <strong>protected</strong> para o <strong>default</strong> é em casos de <strong>herança</strong>, se a classe que possui o tal método <strong>protected</strong> for extendida por outra classe, mesmo que de pacote diferente, o método protected estará acessível à esta subclasse.</p>
Posted in Java Dicas Tagged: abstract, classes, controladores de acesso, default, final, Métodos, modificadores de acesso, private, protected, public, variáveis <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codeerror.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codeerror.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codeerror.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codeerror.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codeerror.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codeerror.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codeerror.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codeerror.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codeerror.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codeerror.wordpress.com/205/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codeerror.wordpress.com&blog=7493690&post=205&subd=codeerror&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://codeerror.wordpress.com/2009/08/30/controle-de-acesso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02b68ef9d46353bdc2a23741b35cf1ac?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">codeerror</media:title>
		</media:content>
	</item>
	</channel>
</rss>