0

以下のコードを切り取った。

私は Java と NetBeans で働いています。2 つの String 変数dbNamesuccessfullyConnectedをフィールドとして宣言しました。

successfullyConnectedはdbNameを出力します。

行、JOptionPane.showMessageDialog(null, successfullyConnected ); 「データベースへの接続に成功しました」ではなく、「null への接続に成功しました」と出力します。

パラメータにテキストを直接入力すると、JOptionPane.showMessageDialog(null, "接続に成功しました " + dbName ); 、目的のテキストを印刷します。

私の質問は、フィールドを使用して文字列を格納することがうまくいかないのはなぜですか? dbNameをsuccessfullyConnectedで出力すると 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();
    }
}
4

3 に答える 3

0

ユーザー入力の前にテキストを初期化しているためsuccessfullyConnected、その時点dbNamenull. ユーザー入力後に初期化する

dbName = JOptionPane.showInputDialog(requestDBName);
successfullyConnected = "Successfully connected to " + dbName;
于 2013-11-11T13:09:17.857 に答える
0

これらの値は、いったん初期化すると、変更しない限り変更されません。それらは動的変数ではなく、変更された値を検出するためのバインディングはありません。

 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);
于 2013-11-11T13:09:33.590 に答える
0

初期化時はdbName常に nullsuccessfullyConnectedです。

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

static fields は必要ないと思います。

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

dbName が初期化されている場合、dbName をメッセージに追加できます。

    dbName = JOptionPane.showInputDialog(requestDBName);
    if(dbName!=null){
      OptionPane.showMessageDialog(null, successfullyConnected + dbName);
    } else {
      OptionPane.showMessageDialog(null, "Please choise one database");
    }
于 2013-11-11T13:10:13.787 に答える