我正在编写这段代码,应该让我将学生添加到一个虚构的数据库中,一切正常但setMail
。
如果我从main运行代码,当我到达邮件部分时,在我写邮件并选择邮件服务(@gmail,@ hotmail等)后我按下aceptar,它应该连接用户名和邮件服务,但是相反,它将获得一个空字符串。
如果我只运行JPane
它可以正常工作。我甚至来自Correos.java的setMail
(属于RegistroEstudiante.java)。
但是如果我从RegistroEstudiante.java运行它,那么字符串总是为空。
通过控制台进行基本测试:两者应该相同
Print from Correos.java: rere@gmail.com
Print from RegistroEstudiante.java: null
package escuela;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.*;
import org.apache.commons.lang3.StringUtils;
public class Estudiante {
public static void main(String[] args) {
RegistroEstudiante estudiante = new RegistroEstudiante();
estudiante.inicio();
}
}
package escuela;
import javax.swing.JOptionPane;
import org.apache.commons.lang3.StringUtils;
public class RegistroEstudiante{
private int matricula = 0; //Sólo 6 dígitos
private byte edad = 0; //No menor de 0
private float altura = 0.0F;
private String nombre = null, menu = null, ape_paterno = null, ape_materno = null, correo = null, genero = null, estadoCivil;
private int length = 0;
private boolean error = false;
public void inicio() {
String[] menuPrincipal = { "Ingresar", "Mostrar", "Salir" };
String[] genero = { "Masculino", "Femenino" };
String[] estadoCivilMenu = { "Soltero/a", "Comprometido/a", "Casado/a", "Divorciado/a", "Viudo/a" };
Correos Correos = new Correos();
do {
try {
setMenu((String)JOptionPane.showInputDialog(null, "¿Qué deseas hacer?", "UNACAR", JOptionPane.QUESTION_MESSAGE, null, menuPrincipal, menuPrincipal[0]));
switch(getMenu()) {
case "Ingresar":
do{
setError(false);
try {
setMatricula(Integer.parseInt((String)JOptionPane.showInputDialog(null, "Introduce Matrícula [6]", "Agregando estudiante", JOptionPane.QUESTION_MESSAGE, null, null, null)));
} catch (java.lang.NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Introdujiste un caractér inválido", "Error", JOptionPane.ERROR_MESSAGE, null);
setError(true);
}
length = (int)(Math.log10(getMatricula())+1); // Saca cantidad de caracteres
if ( (length != 6) && (error == false) )
{
JOptionPane.showMessageDialog(null, "La Matrícula DEBE ser de 6 dígitos", "Error", JOptionPane.ERROR_MESSAGE, null);
setMatricula(0);
}
} while (length != 6);
//SET NOMBRE
do{
setError(false);
setNombre((String)JOptionPane.showInputDialog(null, "Introduce nombre del alumno", "Agregando estudiante", JOptionPane.QUESTION_MESSAGE, null, null, null));
if(StringUtils.isAlpha(getNombre()) == false)
{
JOptionPane.showMessageDialog(null, "El nombre debe contener únicamente letras [A-Za-z]", "Error", JOptionPane.ERROR_MESSAGE, null);
setNombre(null);
setError(true);
}
}while(isError() == true);
//SET APELLIDO PATERNO
do{
setError(false);
setApe_paterno((String)JOptionPane.showInputDialog(null, "Introduce apellido paterno de " + getNombre(), "Agregando estudiante", JOptionPane.QUESTION_MESSAGE, null, null, null));
if(StringUtils.isAlpha(getApe_paterno()) == false)
{
JOptionPane.showMessageDialog(null, "El apellido debe contener únicamente letras [A-Za-z]", "Error", JOptionPane.ERROR_MESSAGE, null);
setApe_paterno(null);
setError(true);
}
}while(isError() == true);
//SET APellido MATERNO FTW
do{
setError(false);
setApe_materno((String)JOptionPane.showInputDialog(null, "Introduce apellido materno de " + getNombre(), "Agregando estudiante", JOptionPane.QUESTION_MESSAGE, null, null, null));
if(StringUtils.isAlpha(getApe_materno()) == false)
{
JOptionPane.showMessageDialog(null, "El nombre debe contener únicamente letras [A-Za-z]", "Error", JOptionPane.ERROR_MESSAGE, null);
setApe_materno(null);
setError(true);
}
}while(isError() == true);
// SELECCIONA SEXO
if(JOptionPane.showOptionDialog(null, "Selecciona género de " + getNombre(), "Agregando estudiante", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, genero, genero[0]) == 0 ){
setGenero("Masculino");
}else{
setGenero("Femenino");
}
// SET ESTADO CIVIL COMPA
setEstadoCivil((String)JOptionPane.showInputDialog(null, "Estado Civil de " + getNombre(), "UNACAR", JOptionPane.QUESTION_MESSAGE, null, estadoCivilMenu, estadoCivilMenu[0]));
// SET EDAD
do{
setError(false);
try {
setEdad(Byte.parseByte((String)JOptionPane.showInputDialog(null, "Introduce la edad del alumno", "Agregando estudiante", JOptionPane.QUESTION_MESSAGE, null, null, null)));
} catch (java.lang.NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Aquí no se aceptan números...", "Error", JOptionPane.ERROR_MESSAGE, null);
setError(true);
}
if(getEdad() < 0)
{
JOptionPane.showMessageDialog(null, getNombre() + " no puede tener 0 años o menos, corrige... ", "Error", JOptionPane.ERROR_MESSAGE, null);
setEdad((byte) 0);
setError(true);
}
}while(isError() == true);
//SET ALTURA
do{
setError(false);
try {
setAltura(Float.parseFloat((String)JOptionPane.showInputDialog(null, "Introduce la altura del alumno", "Agregando estudiante", JOptionPane.QUESTION_MESSAGE, null, null, null)));
} catch (java.lang.NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Aquí no se aceptan letras...", "Error", JOptionPane.ERROR_MESSAGE, null);
setError(true);
}
if(getAltura() < 0)
{
JOptionPane.showMessageDialog(null, getNombre() + " no puede medir 0 centimetros o menos, corrige...", "Error", JOptionPane.ERROR_MESSAGE, null);
setAltura(0.0F);
setError(true);
}
}while(isError() == true);
// SetMail
escuela.Correos.main();
do {
try {
// setCorreo(correos.getCorreoConcatenado());
System.out.println("En RegistroEstudiante.java " + correo);
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} while (correo == null);
break;
case "Mostrar":
break;
} // END SWITCH
}// END TRY
catch (java.lang.NullPointerException e) {
switch(JOptionPane.showConfirmDialog(null, "¿Seguro que deseas salir?", "Salir o no salir?.. He ahí la cuestión...", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null)) {
case 0:
return;
case 1:
break;
}
}
} while (getMenu() != "Salir");
}
public boolean sonLetras(String name) {
return name.matches("[a-zA-Z]+");
}
public int getMatricula() {
return matricula;
}
public void setMatricula(int matricula) {
this.matricula = matricula;
}
public byte getEdad() {
return edad;
}
public void setEdad(byte edad) {
if(edad < 0)
JOptionPane.showMessageDialog(null, "No se aceptan valores menores a 0", "Error", JOptionPane.WARNING_MESSAGE, null);
this.edad = edad;
}
public float getAltura() {
return altura;
}
public void setAltura(float altura) {
this.altura = altura;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApe_paterno() {
return ape_paterno;
}
public void setApe_paterno(String ape_paterno) {
this.ape_paterno = ape_paterno;
}
public String getApe_materno() {
return ape_materno;
}
public void setApe_materno(String ape_materno) {
this.ape_materno = ape_materno;
}
public String getCorreo() {
return correo;
}
public void setCorreo(String correo) {
this.correo = correo;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public boolean isError() {
return error;
}
public void setError(boolean error) {
this.error = error;
}
public String getGenero() {
return genero;
}
public void setGenero(String genero) {
this.genero = genero;
}
public String getEstadoCivil() {
return estadoCivil;
}
public void setEstadoCivil(String estadoCivil) {
this.estadoCivil = estadoCivil;
}
public String getMenu() {
return menu;
}
public void setMenu(String menu) {
this.menu = menu;
}
}
package escuela;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import org.eclipse.wb.swing.FocusTraversalOnArray;
import java.awt.Window.Type;
public class Correos {
private JFrame frmAgregandoEstudiante;
private JTextField txtUsuario;
private String correoConcatenado = null;
/**
* Launch the application.
*/
public static void main() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Correos window = new Correos();
window.frmAgregandoEstudiante.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Correos() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmAgregandoEstudiante = new JFrame();
frmAgregandoEstudiante.setAlwaysOnTop(true);
frmAgregandoEstudiante.setResizable(false);
frmAgregandoEstudiante.setTitle("Agregando estudiante");
frmAgregandoEstudiante.setBounds(100, 100, 272, 164);
frmAgregandoEstudiante.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmAgregandoEstudiante.getContentPane().setLayout(null);
txtUsuario = new JTextField();
txtUsuario.setToolTipText("Introduce la primera parte de tu correo");
txtUsuario.setBounds(10, 48, 104, 30);
frmAgregandoEstudiante.getContentPane().add(txtUsuario);
txtUsuario.setColumns(10);
JComboBox comboBox = new JComboBox();
comboBox.setModel(new DefaultComboBoxModel(new String[] {"@gmail.com", "@outlook.com", "@unacar.mx", "@live.com", "@yahoo.com", "@hotmail.com"}));
comboBox.setBounds(124, 48, 119, 30);
frmAgregandoEstudiante.getContentPane().add(comboBox);
JButton btnAgregar = new JButton("Agregar");
btnAgregar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String user,mail;
RegistroEstudiante re = new RegistroEstudiante();
user = txtUsuario.getText();
mail = (String) comboBox.getSelectedItem();
setCorreoConcatenado(user.concat(mail));
re.setCorreo(getCorreoConcatenado());
System.out.println("re.setcorreo " + re.getCorreo());
}
});
btnAgregar.setBounds(77, 89, 89, 23);
frmAgregandoEstudiante.getContentPane().add(btnAgregar);
JLabel lblNewLabel = new JLabel("Agrega el correo del estudiante");
lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 14));
lblNewLabel.setBounds(10, 11, 207, 27);
frmAgregandoEstudiante.getContentPane().add(lblNewLabel);
frmAgregandoEstudiante.getContentPane().setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{txtUsuario, comboBox, btnAgregar}));
}
private static void addPopup(Component component, final JPopupMenu popup) {
component.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
showMenu(e);
}
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
showMenu(e);
}
}
private void showMenu(MouseEvent e) {
popup.show(e.getComponent(), e.getX(), e.getY());
}
});
}
public String getCorreoConcatenado() {
return correoConcatenado;
}
public void setCorreoConcatenado(String correoConcatenado) {
this.correoConcatenado = correoConcatenado;
}
}
答案 0 :(得分:1)
从Correos.java调用RegistroEstudiante.setCorreo()似乎发生在与do-while循环(main)不同的线程(AWT)上,因此correo字段没有得到更新。通过向代码添加一些Thread.currentThread()调用,日志打印输出如下
En RegistroEstudiante.java null Thread[main,5,main] //Thread.currentThread() printouts from do-while loop
En RegistroEstudiante.java null Thread[main,5,main]
setcorreo called: ddd@gmail.com Thread[AWT-EventQueue-0,6,main] //Thread.currentThread() printout from setCorreo()
re.setcorreo ddd@gmail.com
En RegistroEstudiante.java null Thread[main,5,main]
En RegistroEstudiante.java null Thread[main,5,main]