[RESOLVIDO]Instancio o objeto, porém não consigo navegar em seus metodos

13 respostas
J

Boa noite pessoal, estou com um problema estranho aqui.
Seguinte, tenho as seguintes classes:
MailJava.java
MailJavaSender.java
Principal.java

Fiz um pequeno programinha para enviar e-mail a partir da API JavaMail, apenas para aprendizado.
Hoje, resolvi também aprender a ler e-mail nessa API.
No Principal.java, estava muito bagunçado, então resolvi criar a class Properties.java para configurar alguns valores do objeto da class JavaMail.
Segue um trecho da class Principal.java

package visao;

import javax.mail.MessagingException;

import modelo.MailJava;
import modelo.MailJavaSender;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Principal {
    public static void main(String[] args) {
        MailJava mj = new MailJava();
        //configuracoes de envio
        mj.setSmtpHostMail("smtp.gmail.com");
        mj.setSmtpPortMail("587");
        mj.setSmtpAuth("true");
        mj.setSmtpStarttls("true");

//aqui pra baixo... continua os mj.algumacoisa

O grande problema, está quando eu tendo instanciar o objeto mj na class properties, ele simplesmente não encontra nenhum de seus metodos.

public class Properties {
	 MailJava mj = new MailJava();
	 mj.

//quando dou o mj. nao aparece nenhuma sugestao
}

O q pode estar acontecendo?
Alguém tem alguma idéia do q seja?

Valeu a todos!

13 Respostas

rmendes08

os métodos são públicos ? (tem a palavra public na declaração)

J

Opa,
São sim cara,
são os metodos getters e setters da MailJava
Segue um exemplo de alguns metodos lá:

//metodos getters e setters
	public String getSmtpHostMail() {
		return smtpHostMail;
	}

	public void setSmtpHostMail(String smtpHostMail) {
		this.smtpHostMail = smtpHostMail;
	}

	public String getSmtpPortMail() {
		return smtpPortMail;
	}
Marcelo_de_Andrade

Mesmo que não apareça no autocomplete, faça o seguinte:

MailJava mj = new MailJava();  
             mj.setSmtpHostMail("Teste");

System.out.println(mj.getSmtpPortMail());

Algo vai retornar, mesmo que seja um erro no console. Verifique e poste aqui.

J

Marcelo,
Estou usando a IDE Eclipse ne, ai quando eu dou o atalho CTRL + ESPAÇO para acabar de preencher o sysout (que resultaria em System.out.Printl("")) ele não reconhece nem mesmo isso.

ViniGodoy

Poste a classe MailJava.

J

ViniGodoy, segue a class MailJava

package modelo;
import java.util.List;
import java.util.Map;


public class MailJava {
	//indica se o formato de texto será texto ou html
	public static final String TYPE_TEXT_PLAIN = "text/plain";
	public static final String TYPE_TEXT_HTML = "text/html";
	
	//indica qual será o servidor de email(gmail, hotmail...)        
	private String smtpHostMail;
	
	//indica a porta de acesso ao servidor
	private String smtpPortMail;
	
    //indica que a necessidade de autenticação no servidor(true ou false)
    private String smtpAuth;
    
    //indica ao servidor que ele está recebendo uma conexão segura
    private String smtpStarttls;
    
    //nome do remetente do email
    private String fromNameMail;
    
    //email do remetente
    private String userMail;
    
    //senha do email do remetente
    private String passMail;
    
    //assunto do email
    private String subjectMail;
    
    //corpo do email, onde estará o texto da mensagem
    private String bodyMail;
    
    //lista com email e nome dos destinatários
    private Map<String, String> toMailsUsers;

    //lista contendo os arquivos anexos
    private List<String> fileMails;
    
    //charset, no caso de html é necessário 
    private String charsetMail;
    
    //tipo do formato da mensagem, texto ou html
    private String typeTextMail;

    
    //metodos getters e setters
	public String getSmtpHostMail() {
		return smtpHostMail;
	}

	public void setSmtpHostMail(String smtpHostMail) {
		this.smtpHostMail = smtpHostMail;
	}

	public String getSmtpPortMail() {
		return smtpPortMail;
	}

	public void setSmtpPortMail(String smtpPortMail) {
		this.smtpPortMail = smtpPortMail;
	}

	public String getSmtpAuth() {
		return smtpAuth;
	}

	public void setSmtpAuth(String smtpAuth) {
		this.smtpAuth = smtpAuth;
	}

	public String getSmtpStarttls() {
		return smtpStarttls;
	}

	public void setSmtpStarttls(String smtpStarttls) {
		this.smtpStarttls = smtpStarttls;
	}

	public String getFromNameMail() {
		return fromNameMail;
	}

	public void setFromNameMail(String fromNameMail) {
		this.fromNameMail = fromNameMail;
	}

	public String getUserMail() {
		return userMail;
	}

	public void setUserMail(String userMail) {
		this.userMail = userMail;
	}

	public String getPassMail() {
		return passMail;
	}

	public void setPassMail(String passMail) {
		this.passMail = passMail;
	}

	public String getSubjectMail() {
		return subjectMail;
	}

	public void setSubjectMail(String subjectMail) {
		this.subjectMail = subjectMail;
	}

	public String getBodyMail() {
		return bodyMail;
	}

	public void setBodyMail(String bodyMail) {
		this.bodyMail = bodyMail;
	}

	public Map<String, String> getToMailsUsers() {
		return toMailsUsers;
	}

	public void setToMailsUsers(Map<String, String> toMailsUsers) {
		this.toMailsUsers = toMailsUsers;
	}

	public List<String> getFileMails() {
		return fileMails;
	}

	public void setFileMails(List<String> fileMails) {
		this.fileMails = fileMails;
	}

	public String getCharsetMail() {
		return charsetMail;
	}

	public void setCharsetMail(String charsetMail) {
		this.charsetMail = charsetMail;
	}

	public String getTypeTextMail() {
		return typeTextMail;
	}

	public void setTypeTextMail(String typeTextMail) {
		this.typeTextMail = typeTextMail;
	}

	public static String getTypeTextPlain() {
		return TYPE_TEXT_PLAIN;
	}

	public static String getTypeTextHtml() {
		return TYPE_TEXT_HTML;
	}
    
    
}
ViniGodoy

Os erros que você postou é porque você está tentando usar a classe sem o método main.

Marcelo_de_Andrade

Não vi você fazer o import da classe MailJava, você fez?

J
Então Marcelo, eu tinha copiado todos os imports q estavam na class Principal (onde funciona a instancia), conforme abaixo:
import javax.mail.MessagingException;

import modelo.MailJava;
import modelo.MailJavaSender;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
E mesmo assim, não dá nada. Eu to achando estranho, que nem memso o System.out.println da certo... será q é possível o arquivo não estar "vinculado" ao projeto ou algo do tipo?
J

Vini, não entendi bem.
Quer dizer q essa MailJava, so posso instanciala numa class que possui o main?

ViniGodoy

Cara, como eu falei, sua classe properties está tentando usar o objeto sem estar fazendo isso de dentro de um método.

Você só pode chamar métodos de outro objeto dentro de métodos. Não diretamente no corpo da classe.

Tente:

public class Properties { MailJava mj = new MailJava(); //Agora sim, no construtor... public Properties() { mj.setSmtpPortMail("Teste"); } }

ViniGodoy

Esse é um conceito extremamente básico em Java.

Você pode pode usar um objeto dentro de métodos, de blocos estáticos ou do construtor.

J

Vini,
Realmente era esse o erro.
Não tinha prestado atenção nisso, acho q de tão banal acabei não dando atenção quando aprendi isso.
Bom vivendo e reaprendendo.

Muito obrigado a todos ai pela ajuda!
Boa noite!

Criado 14 de dezembro de 2012
Ultima resposta 15 de dez. de 2012
Respostas 13
Participantes 4