ورود

View Full Version : علت سر ریز شدن استک



Sina.iRoid
دوشنبه 27 بهمن 1393, 13:38 عصر
سلام
دوستان من یه برنامه تمرینی ساده نوشتم. مشکلی که دارم در نحوه ساختن آبجکت هست. به کد نگاه کنید توضیح میدم.

کدکلاس TextFieldFrame:


import java.awt.FlowLayout;


import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;


@SuppressWarnings("serial")
public class TextFieldFrame extends JFrame {

private JTextField textField1; // text field with set size
private JTextField textField2; // text field constructed with text
private JTextField textField3; // text field with text and size
private JPasswordField passwordField; // password field with text

// Constructor
public TextFieldFrame() {
super("Window Demo");
setLayout(new FlowLayout());

// construct text field with 10 column
textField1 = new JTextField(10);
add(textField1);

// construct text field with default text
textField2 = new JTextField("Enter text here");
add(textField2);

// construct text field with default text and 21 column
textField3 = new JTextField("Uneditable text field", 21);
textField3.setEditable(false);
add(textField3);

// construct password field with default text
passwordField = new JPasswordField("Hidden text");
add(passwordField);

// register event handler
TextFieldHandler handler = new TextFieldHandler(this);
textField1.addActionListener(handler);
textField2.addActionListener(handler);
textField3.addActionListener(handler);
passwordField.addActionListener(handler);
}

// Getter
public JTextField getTextField1(){
return textField1;
}
public JTextField getTextField2(){
return textField2;
}
public JTextField getTextField3(){
return textField3;
}
}


کد کلاس TextFieldHandler:


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.JOptionPane;


public class TextFieldHandler implements ActionListener {

// Object from TextFieldFrame class
TextFieldFrame txtFieldFrameObj;

// constructor
public TextFieldHandler(TextFieldFrame txtFieldFrameObj) {
this.txtFieldFrameObj = txtFieldFrameObj;
}

@Override
public void actionPerformed(ActionEvent e) {

String str = "";

// user pressed enter in JTextField textfield1
if (e.getSource() == txtFieldFrameObj.getTextField1()) {
str = String.format("textfield1: %s", e.getActionCommand());
// user pressed enter in JTextField textfield2
}else if (e.getSource() == txtFieldFrameObj.getTextField2()) {
str = String.format("textfield2: %s", e.getActionCommand());
// user pressed enter in JTextField textfield3
}else if (e.getSource() == txtFieldFrameObj.getTextField3()) {
str = String.format("textfield3: %s", e.getActionCommand());
// user pressed enter in JPasswordField passwordField
}else {
str = String.format("passwordField: %s", e.getActionCommand());
}
// display JTextField content
JOptionPane.showMessageDialog(null, str, "Reult", JOptionPane.INFORMATION_MESSAGE);
}
}


و کد کلاس اصلی:


import javax.swing.JFrame;




public class MainClass {


public static void main(String[] args) {

TextFieldFrame frame = new TextFieldFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(500, 500);
frame.setVisible(true);
}
}


الان برنامه بالا درست اجرا میشه. اما اگر در کلاس TextFieldHandler بجای ایجاد آبجکت به شکلی که نوشته شده، به صورت زیر آبجکت تعریف کنم، برنامه کرش می کنه و می نویسه که استک سر ریز شده؟ چرا؟؟ ممنون میشم اگر راهنماییم کنید.

TextFieldFrame txtFieldFrameObj = new TextFieldFrame();

ahmad.mo74
سه شنبه 28 بهمن 1393, 11:41 صبح
سلام، فکر کنم قبلا هم همچین سوالی پرسیده بودی

الان کدت درسته. اما اگر توی کانستراکتور TextFieldHandler دوباره بخوای TextFiledFrame نیو کنی اونوقت کانستراکتور TextFiledFrame صدا زده میشه. و چون توی خط 40 داری دوباره TextFiledHandler نیو میکنی باز این جریان تکرار میشه...و در نهایت انقد آدرس میره تو استک که سرریز میکنه!