Java 当由另一个字段变量打印时,字段变量恢复为初始化值

Java 当由另一个字段变量打印时,字段变量恢复为初始化值,java,global-variables,Java,Global Variables,下面是裁剪过的代码 我在Java和NetBeans工作。我已经声明了两个字符串变量,dbName和successfullyConnected,作为字段 成功连接打印dbName 行JOptionPane.showMessageDialog(空,成功连接);打印“成功连接到空”而不是“成功连接到数据库” 将文本直接放入参数JOptionPane.showMessageDialog(null,“成功连接到”+dbName);,打印所需的文本 我的问题是,为什么不使用字段来存储字符串?为什么在使用成功

下面是裁剪过的代码

我在Java和NetBeans工作。我已经声明了两个字符串变量,dbNamesuccessfullyConnected,作为字段

成功连接打印dbName

行JOptionPane.showMessageDialog(空,成功连接);打印“成功连接到空”而不是“成功连接到数据库”

将文本直接放入参数JOptionPane.showMessageDialog(null,“成功连接到”+dbName);,打印所需的文本

我的问题是,为什么不使用字段来存储字符串?为什么在使用成功连接的打印时,而不是直接放置在方法调用中时,dbName会恢复为null

public class ABMain extends JFrame implements ActionListener {
    //Field
    ...
    private static String dbName;
    private static String successfullyConnected = "Successfully connected to " +dbName;


    //Constructor
    public ABMain() {
        ...
    }

    //Listener
    public void actionPerformed (ActionEvent e) {
        if (e.getSource() == item1) {
            dbName = JOptionPane.showInputDialog(requestDBName);
            try {
                stmt = ABDerbyConnection.createCon(dbName);
                JOptionPane.showMessageDialog(null, successfullyConnected); //echo for debugging
            } catch (SQLException ex) {
                ...
            }
            ...
        }  
    }

public static void main(String[] args) {
        new ABMain();
    }
}

因为您正在用户输入之前成功初始化
已连接的
文本,此时
dbName
null
。在用户输入后初始化它

dbName = JOptionPane.showInputDialog(requestDBName);
successfullyConnected = "Successfully connected to " + dbName;

初始化后,除非修改,否则这些值不会更改。它们不是动态变量,并且没有检测更改值的绑定

 private static String dbName;
 private static String successfullyConnected = "Successfully connected to " +dbName;
你需要这样做

private static String dbName;
private static String successfullyConnected = "Successfully connected to ";

stmt = ABDerbyConnection.createCon(dbName);
successfullyConnected = successfullyConnected +dbName; // See this line is added 
JOptionPane.showMessageDialog(null, successfullyConnected);

As
dbName
在初始化
成功连接时始终为空

private static String dbName;
private static String successfullyConnected = "Successfully connected to " +dbName;
我想你不需要静态场

private String dbName;
private String successfullyConnected = "Successfully connected to ";
如果dbName为initialize,则可以将dbName添加到消息:

    dbName = JOptionPane.showInputDialog(requestDBName);
    if(dbName!=null){
      OptionPane.showMessageDialog(null, successfullyConnected + dbName);
    } else {
      OptionPane.showMessageDialog(null, "Please choise one database");
    }