[英]Need help to run method from running class
我需要帮助将String从正在运行的类传递到另一个正在运行的类。 我举了一个小例子,应该可以进一步解释我的问题。
主班 运行1级和2级
public class main {
public static void main(String[] args){
class2 c2 = new class2();
c2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c2.setSize(200,100);
c2.setLocationRelativeTo(null);
c2.setVisible(true);
class1 c1 = new class1(c2);
c1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c1.setSize(200,100);
c1.setLocationRelativeTo(null);
c1.setVisible(true);
;
}
}
1级 想在第二节课打招呼
public class class1 extends JFrame{
private JButton jb;
private class2 c2;
public class1(class2 c2){
this();
this.c2 = c2;
}
public class1(){
super("");
setLayout(new FlowLayout());
jb = new JButton("click click");
add(jb);
jb.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
sayHi("Hi buddy");
}});
}
public void sayHi(String x){
c2.recieveHi(x);
}
}
第2类:想获得一个Hi ..但从来没有得到任何...
public class class2 extends JFrame{
private JTextField jt;
public class2(){
super("Yeds");
setLayout(new FlowLayout());
jt = new JTextField();
add(jt);
//recieveHi("hey");
}
public void recieveHi(String x){
String j = x;
jt.setText(j);
}
}
多谢您的协助。 我只需要从已经运行的类中运行一个方法。 我需要一个更大的程序。
您有一个将class2
对象作为参数的构造函数,那么为什么不使用它呢? 在main()
方法中:
class2 c2 = new class2();
class1 c1 = new class1(c2); // Use constructor with 'class2' parameter
...
您还可以创建一个方法来在class1
设置“ class2 c2”实例:
public void setClass2Object(class2 pC2) {
this.c2 = pC2;
}
编辑:
正如@vandale所评论的那样,您可能想在构造函数中使用1参数调用this()
,以便正确初始化它:
public class1(class2 c2) {
this();
this.c2 = c2;
}
您没有将C2类的对象传递给C1类的构造函数。
因为您没有传递c2类的对象,所以在调用sayHi(...)时应该得到NullPointerException
请看一下重新排列的代码块
public static void main(String[] args){
class2 c2 = new class2();
c2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c2.setSize(200,100);
c2.setLocationRelativeTo(null);
c2.setVisible(true);
class1 c1 = new class1(c2);
c1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c1.setSize(200,100);
c1.setLocationRelativeTo(null);
c1.setVisible(true);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.