Método não Retorna

Pessoal estou com um problema que não sei o que esta dando errado. Tenho uma classe chamada Frm_menu.java e outra Insumo.java. Quando eu clico no botão ele instancia a classe insumos, logo a seguir ele executa
um método Incluir da classe Insumos. Lá tem uma nova instância, só que
só que é da classe Frm_Menu executando o método getNome. Pois bem esse método não está retornando a String do campo jTextfield2, ele retorna “” isso. Obs: Se executo o método getNome() dentro da classe Frm_menu ele funciona normalmente, retorna o texto digitado. Eu já até debuguei o código com o netbeans !!! não sei

Parte do codigo Menu.java


    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
        Insumos i = new Insumos();
        try {
            i.incluir();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    } 


    public String getNome()
    {   
        String a = jTextField2.getText();
        return a;
    }

Parte do código Insumo.java


/*
 * insumos.java
 *
 * Created on 29 de Novembro de 2006, 11:24
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package br.com.futurartebrindes;

import java.sql.*;
import br.com.futurartebrindes.Frm_menu;
import javax.swing.JOptionPane;

/**
 *
 * @author junior
 */
public class Insumos {
    private Connection conn=null; // Variável de Conexão
    private String sql;
    private PreparedStatement stmt;
    private ResultSet rs;
    /** Creates a new instance of insumos */
    public Insumos() {
        
    }
    /* Método para Incluir */
    public void incluir() throws SQLException
    {
      try
      {
        //frm_menu Mn; 
        Frm_menu m = new Frm_menu();  //Instanciando Classe Frm_menu
        conn = new Conexao().getConnection();
        String a = new Frm_menu().getNome();
        stmt = conn.prepareStatement("insert into insumos (cod_insumo,nm_insumo) values (?,?)");
        //stmt.setInt(1, new Frm_menu().getCodigo());
        stmt.setString(2, new Frm_menu().getNome());
        stmt.execute();
        JOptionPane.showMessageDialog(null,"Inclusão realizada com sucesso!","Atenção", JOptionPane.INFORMATION_MESSAGE);
      }
      catch (SQLException ex) {
      //TODO: use um sistema de log apropriado.
      JOptionPane.showMessageDialog(null,ex.getMessage(),"Atenção", JOptionPane.INFORMATION_MESSAGE);
   
      }     
        
    }
    public static void main(String[] args){
      //insumos(); 
        new Insumos();
   } 
    
}

Obrigado.

Antes de eu responder o que está errado em teu código vou te dar algumas dicas.

[list]

  • Melhore a estrutura do seu código separando as funcionalidades em camadas;
  • Estude o modelo MVC;
  • Estude a definição de JavaBean;
  • Estude a definição de um Broker;
  • Não considere isto uma crítica! Mas um conselho!
    [/list]

O problema está na tua classe Insumo. Lá tu cria uma nova instância Frm_menu ao invés de usar a Frm_menu que realmente tem o valor da caixa de texto! O exemplo abaixo é para como resolver de forma paliativa a questão mas não deixe de estudar o que te recomendei, ok?


//Instanciando Classe Frm_menu 
Frm_menu m = new Frm_menu();  
//...

/*Se tu já criou a parada ali em cima pra que outra instância?!*/
//String a = new Frm_menu().getNome(); 

//Usa a primeira que realmente tem o valor
String a = m.getNome(); 
//...

Espero que te ajude, T+

Bom dia amigo! Abaixo eu listei alguns passos que podem ajudar no funcionamento do seu código. Se mesmo assim naum adiantar basta solicitar ajuda!! :cool:

1 - Crie uma variável qualquer na classe insumos.

Exemplo:

String valor;

2 - Crie um método set dentro da sua classe insumos.

Ficaria assim:

public void setValor(String v){
      valor = v;
}

3 - Crie também um método get dentro sa classe insumos:

public String getValor(){
      return valor;
}

4 - Na classe frm_menu:

Essa linha você apaga:

public String getNome() 
    {    
        String a = jTextField2.getText(); 
        return a; 
    } 

Essa linha você coloca antes do Try que chama o incluir() na ação do botão:

i.setValor(jTextField2.getText());

5 - Agora basta substituir na classe insumos algumas coisas:

Essa linha você apaga:

String a = new Frm_menu().getNome(); 

E a linha:

stmt.setString(2, new Frm_menu().getNome());

Você substitui por:

stmt.setString(2, getValor());
                                 ----------------------------------------

Espero que ajude!! Isso fara com que o seu código fique um pouco mais bem estruturado!

Abraços!!