Ola pessoa, preciso de uma ajuda tenho um sistema que faz uma chamada em um metodo no servidor, esse metodo faz uma busca no banco de dados e retorn uma vetor do tipo “pergunta” porem quando chega no cliente estou recebendo o seguinte erro:
o codigo das classes estao logo depois do erro, nao consegui resolver isso, preciso muito de ajuda.
Resultado no terminal do Cliente:
comecando a conectar
buscando uma pergunta
ja passou da busca
java.lang.ClassCastException: $Proxy2 cannot be cast to rmi.pergunta
at Principal.inicio.<init>(inicio.java:72)
at Principal.Game$25$1.run(Game.java:1348)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
servidor
[code]package rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Server {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
new Server();
}
public Server() {
if(System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
Perguntas pergunta = null;
vezInterface vez = null;
try {
pergunta = new daoPerguntas();
vez=new vez();
}catch (RemoteException e){
e.printStackTrace();
}
try{
java.rmi.registry.LocateRegistry.createRegistry(1099);
Naming.rebind("rmi://localhost:1099/vez", vez);
Naming.rebind("rmi://localhost:1099/pergunta", pergunta);
System.out.println("Aguardando...");
}catch(RemoteException e){
e.printStackTrace();
}catch(MalformedURLException e){
e.printStackTrace();
}
}
}
[/code]
interface perguntas
[code]package rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Vector;
public interface Perguntas extends Remote{
public Vector<pergunta> buscar(String tabela, int id, int dificuldade) throws RemoteException;
}
[/code]
class dao perguntas
[code]package rmi;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JOptionPane;
import rmi.pergunta;
import banco.ConFactory;
public class daoPerguntas extends UnicastRemoteObject implements Perguntas, Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
public daoPerguntas() throws RemoteException {
}
private final String URL ="jdbc:mysql://localhost/algoquester",
NOME = "root", SENHA = "";
private Connection con;
private Statement comando;
public void apagar(String tabela, int id){
conectar();
try {
comando.executeUpdate("Delete FROM" + tabela + "WHERE id= '" +id+ "';");
} catch (SQLException e) {
imprimeErro("Erro ao apagar pergunta", e.getMessage());
} finally {
fechar();
}
}
public Vector<pergunta> buscarTodos(String tabela) throws RemoteException {
conectar();
Vector<pergunta> resultados = new Vector<pergunta>();
ResultSet rs;
try {
rs = comando.executeQuery("SELECT * FROM " + tabela);
while (rs.next()) {
pergunta temp = new pergunta();
//pega todos os atributos da pergunta
temp.setDificuldade(rs.getInt("dificuldade"));
temp.setPergunta(rs.getString("pergunta"));
temp.setRespA(rs.getString("respA"));
temp.setRespB(rs.getString("respB"));
temp.setRespC(rs.getString("respC"));
temp.setRespD(rs.getString("respD"));
temp.setRespE(rs.getString("respE"));
String resposta = rs.getString("respCerta");
char respCerta = resposta.charAt(0);
temp.setRespCerta(respCerta);
temp.setRespQuantidade(rs.getInt("respQuantidade"));
resultados.add(temp);
}
return resultados;
}catch (SQLException e) {
imprimeErro("Erro ao buscar pergunta", e.getMessage());
return null;
}
}
public Vector<pergunta> buscar(String tabela, int id ,int dificuldade) throws RemoteException {
conectar();
Vector<pergunta> resultados = new Vector<pergunta>();
ResultSet rs;
try {
rs = comando.executeQuery("Select * FROM " +tabela+ " WHERE id='" +id+ "' and dificuldade ='" +dificuldade +"';");
while (rs.next()) {
pergunta temp = new pergunta();
//pega todos os atributos da pergunta buscada
temp.setPergunta(rs.getString("pergunta"));
temp.setRespA(rs.getString("respA"));
temp.setRespB(rs.getString("respB"));
temp.setRespC(rs.getString("respC"));
temp.setRespD(rs.getString("respD"));
temp.setRespE(rs.getString("respE"));
String resposta = rs.getString("respCerta");
char respCerta = resposta.charAt(0);
temp.setRespCerta(respCerta);
temp.setRespQuantidade(rs.getInt("respQuantidade"));
resultados.add(temp);
}
return resultados;
} catch (SQLException e) {
imprimeErro("Erro ao buscar pergunta", e.getMessage());
return null;
}
}
public void insere(String tabela, pergunta pergunta){
conectar();
try {
comando.executeUpdate("INSERT INTO " +tabela+ "VALUES('" +pergunta.getDificuldade()+ "' , '" + pergunta.getPergunta()+
"' , '" +pergunta.getRespA()+ "', '" +pergunta.getRespB()+"', '" +pergunta.getRespC()+ "','"+pergunta.getRespD()+"','" +
pergunta.getRespE()+"','"+pergunta.getRespCerta()+"','" +pergunta.getRespQuantidade()+ "')");
} catch (SQLException e) {
imprimeErro("Erro ao inserir pergunta", e.getMessage());
} finally {
fechar();
}
}
private void conectar(){
try {
con = ConFactory.conexao(URL, NOME, SENHA, ConFactory.MYSQL);
comando = con.createStatement();
System.out.println("Conectado!");
} catch (ClassNotFoundException e) {
imprimeErro("Erro ao carregar o driver", e.getMessage());
} catch (SQLException e) {
imprimeErro("Erro ao conectar", e.getMessage());
}
}
private void fechar() {
try {
comando.close();
con.close();
System.out.println("Conexão Fechada");
} catch (SQLException e) {
imprimeErro("Erro ao fechar conexão", e.getMessage());
}
}
private void imprimeErro(String msg, String msgErro) {
JOptionPane.showMessageDialog(null, msg, "Erro Critico", 0);
System.err.println(msg);
System.out.println(msgErro);
System.exit(0);
}
}[/code]
classe perguntas
[code]package rmi;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class pergunta extends UnicastRemoteObject implements Serializable{
public pergunta() throws RemoteException {
}
/**
*
*/
private static final long serialVersionUID = 1L;
private int dificuldade, respQuantidade;
private String pergunta, respA, respB, respC, respD, respE;
private char respCerta;
public int getDificuldade() {
return dificuldade;
}
public void setDificuldade(int dificuldade) {
this.dificuldade = dificuldade;
}
public String getPergunta() {
return pergunta;
}
public void setPergunta(String pergunta) {
this.pergunta = pergunta;
}
public String getRespA() {
return respA;
}
public void setRespA(String respA) {
this.respA = respA;
}
public String getRespB() {
return respB;
}
public void setRespB(String respB) {
this.respB = respB;
}
public String getRespC() {
return respC;
}
public void setRespC(String respC) {
this.respC = respC;
}
public String getRespD() {
return respD;
}
public void setRespD(String respD) {
this.respD = respD;
}
public String getRespE() {
return respE;
}
public void setRespE(String respE) {
this.respE = respE;
}
public char getRespCerta() {
return respCerta;
}
public void setRespCerta(char respCerta) {
this.respCerta = respCerta;
}
public int getRespQuantidade() {
return respQuantidade;
}
public void setRespQuantidade(int respQuantidade) {
this.respQuantidade = respQuantidade;
}
}
[/code]
no lado do cliente :
parte da classe que faz a chamada rmi e tenta mostrar o resultado;
[code]System.out.println(“comecando a conectar”);
Perguntas busca = (Perguntas) Naming.lookup("rmi://localhost:1099/pergunta");
System.out.println("buscando uma pergunta");
Vector<pergunta> resultado = busca.buscar(tabela, id, dificuldade);
System.out.println("ja passou da busca");
JButton btnFechar = new JButton("Fechar");
btnFechar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
// Color bg = new Color(1f,1f,1f,0);
JTextArea txtAreaResposta = new JTextArea();
txtAreaResposta.setEditable(false);
for (Iterator<pergunta> iterator = resultado.iterator(); iterator.hasNext();) {
final pergunta perg = iterator.next();
//perguntasInterface perg = new pergunta();
//perg = iterator.next();
txtAreaResposta.setText(perg.getPergunta());[/code]
Dentro do projeto do cliente tem um pacote igual do servidor com a classe pergunta e a interface Perguntas.
agradeco desde de ja pela ajuda de quem puder.