我陷入了一个我确信很容易克服的问题。主类用于构建一个gui:
// AlladinLamp.java
package alladinlamp;
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;
class AlladinLamp {
int fnh;
ComboBox runners;
[ ...code ]
AlladinLamp() {
[ ...code ]
runners = new JComboBox( numberOfRunners );
runners.setMaximumRowCount(5);
runners.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
String runnersNumber = ( String )runners.getSelectedItem();
fnh = Integer.parseInt( runnersNumber );
}
[ ...code ]
public int getFNH() { return fnh; }
[ ...code ]
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run() {
AlladinLamp lamp = new AlladinLamp();
}
});
}
我希望能够从其他文件中读取fnh
package alladinlamp;
Class Processes {
int fullNH;
AlladinLamp lamp;
Processes() {
lamp = new AlladinLamp();
fullNH = lamp.getFNH();
[ ...code ]
}
[ ...code ]
}
但它没有发生(fnh = null)。整数在它创建的同一个文件中读取。我究竟做错了什么?任何帮助将不胜感激。
答案 0 :(得分:0)
我怀疑这里发生的事情是AlladinLamp中设置你感兴趣的变量的actionPerformed()方法被称为之后你的Processes类的构造函数...这是试图使用那个号码。在这里尝试的简单方法是在actionPerformed中插入System.out.println,并在AlladinLamp和Processes构造函数的末尾插入System.out.println,并查看事情发生的顺序。
这与其他海报提到的包装无关。如果不指定public,则默认可见性是包级别可见性,因此应该没有问题。
忘了提....请记住,Swing库是一个基于事件的GUI库。因此,您的GUI将首先构建。直到以后才会调用actionPerformed方法...一旦设置了整个UI并且你从组合框中选择了一些东西。