Erro no java: java.lang.ClassCastException

estou tendo o seguinte erro quando tendo fazer o retorno da classe carregada dinamicamente:
java.lang.ClassCastException: java.lang.String cannot be cast to java.net.Socket

classe que é carregada de forma dinamica

public static Socket servidor(){
        
        Socket conexaoCliente = null;
            try{
    //          JOptionPane.showMessageDialog(null, "lol \n" + resultados.toString());
                ServerSocket servidor = new ServerSocket(Integer.parseInt(resultados.get(1)));
                System.out.println("A porta " + servidor.getLocalPort() + " esta aberta para conexão");
                System.out.println("Mensagem do servidor: Bom dia/tarde/noite");

                JOptionPane.showMessageDialog(null, "Estou esperando uma conexão");
                conexaoCliente = servidor.accept();
                JOptionPane.showMessageDialog(null, "Estou conectato");
                System.out.println("O cliente" + conexaoCliente.getInetAddress().getHostAddress()+" esta conectado");  

//               Escreve escreve = new Escreve(resultados.get(1), conexaoCliente, nC );
//               new Thread(escreve).start();

//                JOptionPane.showMessageDialog(null, "Olha esse contador: " + nC);
                nC++;
           
        }catch(IOException e){
            System.out.println("Erro: " + e.getMessage());
            
            
        }
    
            return conexaoCliente;
    }

classe que invoca a outra dinamicamente:

    public static void carregaComunicação(){
        
            
                caminhoArquivoComunica = new String(suporte.getCaminhoJarComunicacao());
            try{
                
                myJarFile = new URL("file:///"+ caminhoArquivoComunica); 
                URLClassLoader cl = URLClassLoader.newInstance(new URL[]{myJarFile});
                Jarred = cl.loadClass(suporte.getCaminhoPacoteComunica());
                
                simpleWriter = Jarred.getMethod("setParams", new Class[] {String.class});
                JarredObject = Jarred.newInstance();
            
                Object response = simpleWriter.invoke(JarredObject, suporte.getMensagemFinalComunicacao());
                suporte.setServidor((Socket) response);
                JOptionPane.showMessageDialog(null, "=D");
                //JOptionPane.showMessageDialog(null, "mensagem enviada: " + suporte.getMensagemFinalComunicacao() + "\n caminho especificado" + caminhoArquivoComunica );
            }catch(IllegalArgumentException e){
                System.out.println("Argumentos invalidos1-1: " + e.getMessage());
            }catch(IllegalAccessException ex){
                System.out.println("Acesso negado1-2: " + ex.getMessage());
            }catch(InvocationTargetException erro){
                System.out.println("O metodo nao pode ser invocado1-3: " + erro.getMessage());
            }catch(MalformedURLException e){
                System.out.println("Erro no caminho do arquivo1-4: " + e.getMessage());
            }catch(InstantiationException e){
                System.out.println("Erro ao instanciar o objeto1-5: " + e.getMessage());
            }catch(NoSuchMethodException e){
                System.out.println("Erro ao carregar o metodo1-6: " + e.getMessage());
            }catch(SecurityException ex){
                System.out.println("Erro no tipo do metodo1-7: " + ex.getMessage());
            }catch(ClassNotFoundException e){
                System.out.println("Erro no carregamento do pacote/classe1-8: " + e.getMessage());
            }
        }

não consigo capturar o retorno, pois preciso do retorno para usar em outra parte do codigo

OBS: a classe servidor é um .jar que esta sendo carregada de forma dinamica ._.

O seu método “setParams” retornou uma String, que você guardou na variável response.
Você está tentando fazer um cast dessa String para um objeto Socket, isso não é possível.

Dica, procure utilizar nomes de variáveis coerentes, isso facilita o entendimento do código, por exemplo:
1 - seu objeto do tipo Class, que representa a classe a ser instanciada, porque não chamou de clazz ou de type?
2 - seu objeto do tipo Method você chamou de simpleWriter, porque não chamou ele de setParams, que é justamente o método refletido por aquele objeto?
3 - A instância de seu objeto você chamou de JarredObject, mas o objeto não está dentro de um JAR, ele está na memória :wink:

5 curtidas

Obrigado, sobre os nomes de variáveis eu irei deixar mais coerente, eu tive que fazer umas mudanças no código e com tanta variável eu tive muitos problemas :sweat_smile:, eu irei ficar mais atendo a isso.
Muito Obrigado pela ajuda :slight_smile:

1 curtida