Olá pessoal, tudo bem?
Seguinte amigos, estou tentando implementar uma aplicação em Flex com JAVA onde eu mando do Flex para meu Controller no JAVA um objeto de uma classe em ActionScript …
Em JAVA eu faço sem problemas, mas no flex quando esse objeto chega ele acusa a exceção Erro:JAVAlang.NullPointerException : null
coloco abaixo meu codigo para mostrar q estou fazendo … sei q as classes não estão das melhores, mas na verdade estou ajudando uma amiga da faculdade e programei as classes de acordo com o diagrama de classes que ela me passou…rs… naum estou tirando a responsa da minha costa não…rs
[color=red]CLASSE DOMAINOBJECT.AS[/color]
package br.com.pfc.entidade
//[RemoteClass(alias="br.com.pfc.entidade.DomainObject")]
{
public class DomainObject
{
protected var id:int;
public function setId(id:int):void
{
this.id=id;
}
public function getId():int
{
return id;
}
}
}
[color=blue] ESSA CLASSE É ESPELHO DA CLASSE DOMAINOBJECT.JAVA[/color]
package br.com.pfc.entidade;
public class DomainObject {
protected int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
[color=red]CLASSE ALUNO.AS[/color]
package br.com.pfc.entidade
{
[RemoteClass(alias="br.com.pfc.entidade.Aluno")]
public class Aluno extends Pessoa
{
private var sexo:String;
private var dataNascimento:String;
private var matricula:int;
private var serie:String;
private var ano:String;
private var turma:String;
private var end:Endereco;
private var mae:Mae;
private var pai:Pai;
public function getSexo():String {
return sexo;
}
public function setSexo(sexo:String):void {
this.sexo = sexo;
}
public function getDataNascimento():String {
return dataNascimento;
}
public function setDataNascimento(dataNascimento:String):void {
this.dataNascimento = dataNascimento;
}
public function getMatricula():int {
return matricula;
}
public function setMatricula(matricula:int):void {
this.matricula = matricula;
}
public function getSerie():String {
return serie;
}
public function setSerie(serie:String):void {
this.serie = serie;
}
public function getAno():String {
return ano;
}
public function setAno(ano:String):void {
this.ano = ano;
}
public function getTurma():String {
return turma;
}
public function setTurma(turma:String):void {
this.turma = turma;
}
public function getEnd():Endereco{
return end;
}
public function setEnd(end:Endereco):void{
this.end = end;
}
public function getMae():Mae{
return mae;
}
public function setMae(mae:Mae):void{
this.mae = mae;
}
public function getPai():Pai{
return pai;
}
public function setPai(pai:Pai):void{
this.pai = pai;
}
}
}
[color=blue]ESSA CLASSE É ESPELHO DA CLASSE ALUNO.JAVA[/color]
[color=red]CLASSE ALUNO.JAVA[/color]
package br.com.pfc.entidade;
public class Aluno extends Pessoa{
private String sexo;
private String dataNascimento;
private int matricula;
private String serie;
private String ano;
private String turma;
private Endereco end;
private Mae mae;
private Pai pai;
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public String getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(String dataNascimento) {
this.dataNascimento = dataNascimento;
}
public int getMatricula() {
return matricula;
}
public void setMatricula(int matricula) {
this.matricula = matricula;
}
public String getSerie() {
return serie;
}
public void setSerie(String serie) {
this.serie = serie;
}
public String getAno() {
return ano;
}
public void setAno(String ano) {
this.ano = ano;
}
public String getTurma() {
return turma;
}
public void setTurma(String turma) {
this.turma = turma;
}
public Endereco getEnd(){
return end;
}
public void setEnd(Endereco end){
this.end = end;
}
public Mae getMae() {
return mae;
}
public void setMae(Mae mae) {
this.mae = mae;
}
public Pai getPai() {
return pai;
}
public void setPai(Pai pai) {
this.pai = pai;
}
}
[color=red]MEU CONTROLE.JAVA[/color]
package br.com.pfc.controle;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import br.com.pfc.DAO.DAOAluno;
import br.com.pfc.entidade.*;
public class Controle {
public void chamarInserir (DomainObject obj) throws ClassNotFoundException, SQLException
{
if (obj instanceof Aluno)
{
Aluno alu = (Aluno) obj;
//essa showMessage aparece vazia
JOptionPane.showMessageDialog(null,alu.getNome());
//Essa showMessage usei para testar se ele sabe se obj eh uma instancia de Aluno.Aqui ele acusa True
JOptionPane.showMessageDialog(null,"OBJ eh instancia de Aluno? "+(obj instanceof Aluno));
//Essa showMessage usei para testar se realmente ele sabe se obj eh uma instancia de Aluno. Aqui ele acusa false
JOptionPane.showMessageDialog(null,"OBJ eh instancia de Mâe? "+(obj instanceof Mae));
DAOAluno daoAluno = new DAOAluno();
daoAluno.cadastrar(alu);
}
}
}
[color=red]CLASSE DAOALUNO.JAVA [/color]
package br.com.pfc.DAO;
import java.sql.*;
import javax.swing.JOptionPane;
import br.com.pfc.entidade.Aluno;
import br.com.pfc.utilitarios.Conexao;
public class DAOAluno extends DAO_Generico
{
private static Connection connection;
public boolean cadastrar(Aluno alu) throws ClassNotFoundException, SQLException
{
String sqlInsert = "INSERT INTO PFC_ALUNO (NOME_ALUNO,RG_ALUNO,CPF_ALUNO) VALUES ('"+alu.getNome()+"','"+alu.getRg()+"','"+alu.getCpf()+"')";
statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
int cadastrado=statement.executeUpdate(sqlInsert);
if (cadastrado==1)
return true;
else
return false;
}
public boolean alterar(Aluno alu) throws ClassNotFoundException, SQLException
{
connection = Conexao.conectar();
try
{
String sqlUpdate=null;
statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
int alterar = statement.executeUpdate(sqlUpdate);
if (alterar == 1)
{
return true;
}else
{
return false;
}
}catch (SQLException erro)
{
JOptionPane.showMessageDialog(null, "Erro na Altera��o dos dados. "+erro);
return false;
}
}
public boolean excluir(int codigo) throws ClassNotFoundException, SQLException {
connection = Conexao.conectar();
try
{
String sqlDelete=null;
statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
int exclusao = statement.executeUpdate(sqlDelete);
if (exclusao==1)
{
return true;
}else
{
return false;
}
}catch (SQLException erro)
{
JOptionPane.showMessageDialog(null, "Erro na Exclus�o dos dados. "+erro);
return false;
}
}
}
[color=blue]QUE SE ESTENDE DA CLASSE DAO_GENERICO[/color]
package br.com.pfc.DAO;
import java.sql.ResultSet;
import java.sql.Statement;
public abstract class DAO_Generico
{
protected static Statement statement;
protected static ResultSet resultset;
}
[color=red]MINHA VIEW EM .MXML[/color]
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" backgroundColor="#E2E2EA">
<mx:RemoteObject id="Controle" destination="Controle" result="resultado(event)" fault="erro(event)">
<mx:method name="chamarInserir"/>
</mx:RemoteObject>
<mx:Accordion x="116" y="0" width="554" height="312">
<mx:Canvas id="canvasALuno" label="Dados Aluno" width="100%" height="100%" backgroundColor="#E2E2EA">
<mx:TextInput x="130" y="43" width="249" id="textNomeAluno"/>
<mx:Label x="27" y="45" text="Nome do Aluno:"/>
<mx:TextInput x="114" y="86" id="textRgAluno"/>
<mx:Label x="27" y="88" text="RG do Aluno:"/>
<mx:TextInput x="382" y="86" id="textCpfAluno"/>
<mx:Label x="295" y="88" text="CPF do Aluno:"/>
<mx:TextInput x="126" y="139" width="122" id="textSexoAluno"/>
<mx:Label x="27" y="141" text="Sexo do Aluno:"/>
<mx:TextInput x="412" y="139" width="119" id="textNascAluno"/>
<mx:Label x="282" y="141" text="Data Nasc. do Aluno:"/>
</mx:Canvas>
<mx:Canvas id="canvasEndereco" label="Endereço" width="100%" height="100%" backgroundColor="#E2E2EA">
<mx:TextInput x="108" y="43" width="236" id="textLogradouro"/>
<mx:Label x="27" y="45" text="Logradouro:"/>
<mx:TextInput x="443" y="43" id="textNumero" width="57"/>
<mx:Label x="382" y="45" text="Número:"/>
<mx:TextInput x="124" y="86" id="textComplemento"/>
<mx:Label x="27" y="88" text="Complemento:"/>
<mx:TextInput x="84" y="139" width="134" id="textCidade"/>
<mx:TextInput x="297" y="139" width="134" id="textCEP"/>
<mx:Label x="258" y="141" text="CEP:"/>
<mx:Label x="27" y="141" text="Cidade:"/>
<mx:TextInput x="373" y="86" width="153" id="textBairro"/>
<mx:Label x="323" y="88" text="Bairro:"/>
</mx:Canvas>
<mx:Canvas id="canvasContatos" label="Contatos" width="100%" height="100%" backgroundColor="#E2E2EA">
</mx:Canvas>
<mx:Canvas id="canvasMae" label="Dados Mãe" width="100%" height="100%" backgroundColor="#E2E2EA">
<mx:TextInput x="122" y="43" width="249" id="textNomeMae"/>
<mx:Label x="27" y="45" text="Nome da Mãe:"/>
<mx:TextInput x="106" y="86" id="textRgmae"/>
<mx:Label x="27" y="88" text="RG da Mãe:"/>
<mx:TextInput x="382" y="86" id="textCpfMae"/>
<mx:Label x="295" y="88" text="CPF do Mãe:"/>
<mx:TextInput x="147" y="137" width="119" id="textProfissaoMae"/>
<mx:Label x="27" y="139" text="Profissão da Mãe:"/>
</mx:Canvas>
<mx:Canvas id="canvasPai" label="Dados Pai" width="100%" height="100%" backgroundColor="#E2E2EA">
<mx:TextInput x="122" y="43" width="249" id="textNomePai"/>
<mx:Label x="27" y="45" text="Nome da Pai:"/>
<mx:TextInput x="106" y="86" id="textRgPai"/>
<mx:Label x="27" y="88" text="RG da Pai:"/>
<mx:TextInput x="382" y="86" id="textCpfPai"/>
<mx:Label x="295" y="88" text="CPF do Pai:"/>
<mx:TextInput x="147" y="137" width="119" id="textProfissaoPai"/>
<mx:Label x="27" y="139" text="Profissão da Pai:"/>
</mx:Canvas>
</mx:Accordion>
<mx:Script>
<![CDATA[
import br.com.pfc.entidade.*;
import mx.rpc.events.*;
import mx.controls.Alert;
[Bindable]
var obj:DomainObject;
var alu:Aluno = new Aluno();
var end:Endereco = new Endereco();
var mae:Mae;
var pai:Pai = new Pai();
public function setarValores():void
{
//Alert.show("entrou no metodo");
//Alert.show ("variaveis declaradas");
alu.setNome("Ola");
alu.setRg(int(textRgAluno.text));
alu.setCpf(int (textCpfAluno.text));
alu.setSexo(textSexoAluno.text);
alu.setDataNascimento(textNascAluno.text);
//Alert.show("primeiro bloco de sets");
/*setando os valores da classe endereço para seta-lo depois na classe aluno
//como aluno tem um atributo chamado end que é do tipo Endereco, precisa
//primeiro declarar um objeto de Endereco, setar os valores para depois
//passar pra classe aluno, jah que o setEnd de aluno recebe um parametro
//do tipo Endereco*/
end.setRua(textLogradouro.text);
end.setNumero(int (textNumero.text));
end.setComplemento(textComplemento.text);
end.setBairro(textBairro.text);
//Alert.show("segundo bloco de sets");
//setando endereço na classe aluno
alu.setEnd(end);
//setando os valores da classe Mae para seta-lo depois na classe aluno
//como aluno tem um atributo chamado mae que é do tipo Mae, precisa
//primeiro declarar um objeto de Mae, setar os valores para depois
//passar pra classe aluno, jah que o setMae de aluno recebe um parametro
//do tipo Mae
mae = new Mae;
//Alert.show(textLogradouro.text);
mae.setNome(textNomeMae.text);
mae.setRg(int (textRgmae.text));
mae.setCpf(int (textCpfMae.text));
mae.setProfissao(textProfissaoMae.text);
//Alert.show(end.getNumero().toString());
//setando mae na classe aluno
alu.setMae(mae);
//setando os valores da classe Pai para seta-lo depois na classe aluno
//como aluno tem um atributo chamado pai que é do tipo Pai, precisa
//primeiro declarar um objeto de Pai, setar os valores para depois
//passar pra classe aluno, jah que o setPai de aluno recebe um parametro
//do tipo Pai
pai.setNome(textNomePai.text);
pai.setRg(int (textRgPai.text));
pai.setCpf(int (textCpfPai.text));
pai.setProfissao(textProfissaoPai.text);
//setando pai na classe aluno
alu.setPai(pai);
obj = (alu);
Alert.show("cast feito");
Alert.show(alu.getNome());
Controle.chamarInserir (obj);
}
public function chamaInserir():void
{
}
public function resultado(event:ResultEvent)
{
if (event.result==true)
Alert.show("OK");
else
Alert.show(event.message.toString());
}
public function erro(event:FaultEvent):void
{
Alert.show("Erro: "+event.fault.faultString);
}
]]>
</mx:Script>
<mx:Button x="142" y="340" label="Cadastrar" click="{setarValores()}" width="88" height="44"/>
</mx:Module>
Então, se vocês puderem me ajudar, agradeço demais…
E aproveitando a deixa, deixe tirar outra duvida. Usei o accordion para organizar as informações dessa tela de cadastro, mas notei um problema. Se nenhum textInput de cada canvas estiver preenchido com algo, qdo se clica no botão pra chamar a [color=green]function[/color] ele não faz nada. Ao preencher com um ponto que seja pelo menos um textInput de cada canvas a mágica acontece…rs… isso é um bug ou pode ser corrigido??
muito grato desde já pela atenção…