2011-07-13 15 views
-2

私はもう一度私はこのコードを動作させるように見えることができません。私は基本的に、ボタンがクリックされたときに何もしない理由についてアドバイスを求めています。ソースコードを添付したいですか?私のプログラムのアクションリスナーは動作しません

私が実装しようとしている方法:

   if(firstTime == false) { 
       JavaDB jdb = new JavaDB(); 
     } 

     JavaDB window = new JavaDB(""); 
     window.addWindowListener(new WindowAdapter(){ 
      public void windowClosing(WindowEvent e){ 
        System.exit(0); 
       } 
      }); 
     } 

そして、ここではactionListnerです::

  submit = new JButton("Submit"); 
      c.add(submit); 
       submit.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         if(e.getSource().equals(submit)) { 
         UserInput(); 
      } 
     } 
    }); ;   

あなた場合

public static void UserInput() { 
     try { 
     stmt = connect.createStatement(); 
     ResultSet res = stmt.executeQuery("SELECT * FROM " + tableName); 
     while (res.next()) { 
      if (res.getString("Username").equals(usernameField.getText())) { 
       if (res.getString("Password").equals(passwordField.getPassword())) { 
        JOptionPane.showMessageDialog(null, "Correct", "Correct", 
          JOptionPane.INFORMATION_MESSAGE); 
       } else { 
        JOptionPane.showMessageDialog(null, "Error. Incorrect " 
          + "username or password.", "Error", 
          JOptionPane.ERROR_MESSAGE); 
       } 
      } else { 
       JOptionPane.showMessageDialog(null, "Error. Incorrect " 
         + "username or password.", "Error", 
         JOptionPane.ERROR_MESSAGE); 
      } 
     } 
     res.close(); 
     stmt.close(); 
     connect.close(); 

     } catch (SQLException sqlExcept) { 
     sqlExcept.printStackTrace(); 
     } 

    } 

そして、ここでは、私はそれを呼んでいる方法ですもう私に知らせる必要があります。私は自分自身にJavaを教えてきましたし、何を学ぶべきか分かりませんので、どんなヒントも歓迎されます。私はオーバーフローとポスティングコードをスタックするために新しいので、あなたが私に与えることができるものは高く評価されます。前もって感謝します。

編集:このような内部でスレッドを使用したイベント処理用のクラスを追加しました。

   public class ButtonHandler implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     if(e.getSource().equals(submit)){ 
      Thread th = new Thread(new JavaDB()); 
      th.start(); 
      th.run(); 
      try { 
       th.wait(); 
      } catch (InterruptedException e1) { 
      } 
     } 
     else{ 
     System.exit(0); 
     } 
    } 

そして、UserInputをrun()に変更しました。ただし、Submitボタンをクリックすると、GUIが表示されなくなります。あなたが必要とする、私はHow to Use Password Fieldsに示すように、

+5

投稿したコードブロックにActionListenerコードが少し表示されません。なぜActionListenersの使用を伴わない場合、それはなぜこのようなタイトルですか?また、具体的にあなたの問題とあなたの質問は何ですか?あなたが掲示しているのは、あいまいな欲望と無関係なコードです。私たちがあなたを助ける機会があれば、もっと必要になると思います。 –

+1

あなたは正確に何を求めていますか? – Logan

+0

これでActionListenerのコードが表示されるので、どこかに行っています。この時点で、 'System.out 'を配置することを含むいくつかのデバッグが必要になると思います。println( "code"と "foo"の変数の002は "+ foo";)はプログラム中のステートメントで、呼び出されるべきメソッドとその時点での変数の状態が呼び出されているかどうかを調べます。 –

答えて

1

PasswordDemoを教えて、あなたの研究のための良い出発点となり、それ以外

   public static void main(String args[]) throws SQLException, 
     InterruptedException { 
    createConnection(); 
    boolean firstTime = firstTime(); 
    if (firstTime) { 
     JavaDB db = new JavaDB(""); 
     db.createAccount(); 
     try { 
      connect = DriverManager 
        .getConnection("jdbc:derby:\\KeithDB;shutdown=true"); 
     } catch (SQLException XJ015) { 
     } 
    } 
    if (firstTime == false) { 
     JavaDB jdb = new JavaDB(); 
     Thread th = new Thread(); 
    } 

    JavaDB window = new JavaDB(""); 
    window.addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
      System.exit(0); 
     } 
    }); 
} 

何か:ちょうどあなたが必要な場合があります参考のために、ここに私のメインの方法ですそれは効果的になりますsscce

補遺:欠席あなたが使用しているデータベースの完全な例や知識が、私は以下の結果を得た、

Version: H2 1.3.157 (2011-06-25) 1.3 

H2 Databaseに対してPasswordDemoに次の変更を実行して:

if (isPasswordCorrect(input)) { 
    try { 
     Connection conn = DriverManager.getConnection(
      "jdbc:h2:mem:", "sa", "secret"); 
     DatabaseMetaData metaData = conn.getMetaData(); 
     System.out.println("Version:" 
      + " " + metaData.getDatabaseProductName() 
      + " " + metaData.getDatabaseProductVersion() 
      + " " + metaData.getDatabaseMajorVersion() 
      + "." + metaData.getDatabaseMinorVersion()); 
    } catch (SQLException ex) { 
     ex.printStackTrace(System.err); 
    } 
} ... 

補遺次の結果が得られました:

Version: Apache Derby 10.6.2.1 - (999685) 10.6 
Apache Derbyに対するに次の変更を実行して、

:私は最終的にそれが動作するようになった

if (isPasswordCorrect(input)) { 
    try { 
     EmbeddedDataSource ds = new EmbeddedDataSource(); 
     ds.setDatabaseName("/home/trashgod/.netbeans-derby/dbtest"); 
     Connection conn = ds.getConnection("sa", "secret"); 
     DatabaseMetaData metaData = conn.getMetaData(); 
     System.out.println("Version:" 
      + " " + metaData.getDatabaseProductName() 
      + " " + metaData.getDatabaseProductVersion() 
      + " " + metaData.getDatabaseMajorVersion() 
      + "." + metaData.getDatabaseMinorVersion()); 
    } catch (SQLException ex) { 
     ex.printStackTrace(System.err); 
    } 
} ... 
+0

それを傷つける。私はすべてのスレッドを取り除かなければなりませんでした。なぜなら、いくつかの変更の後、結果セットが開いていないというエラーが出ました。自動コミットがオフであることを確認してください。助けてください。 –

+0

@Keith:私は上記で詳述しました。 – trashgod

+0

私はあなたが何をしているのか分からない。私は自分のデータベースにApache Derbyを使用しています。私はあなたのソースコードをpmにすることはできますか? –

1

!同じ変数名を持つ別のコンストラクタがあり、JTextFieldsへの呼び出しは他のコンストラクタへの呼び出しと誤解されました。 fooステートメントは本当に助けになった!!!みんなありがとう!

+0

結果を共有していただきありがとうございます。私は同じような間違いを犯したと確信しています。私はあなたの答えを有益であると投票しています。あなたの評判は10ポイント高くなります。もちろん、あなた自身の答えを受け入れることは何のポイントも与えません。代わりに私の答えを受け入れるならば、あなたはさらに2つのポイントを得るでしょう。詳細は[faq]を参照してください。 – trashgod

+1

情報ありがとうございました –

関連する問題