2017-09-19 3 views
0

hat hier ein Problem, versuchen, eine Anmeldung an Datenbank-System im Moment zu erstellen. Ich habe zu Klassen: UserLogManagerMainWindow und DatabaseConnectionFrame. Mein Programm ist über Protokollverwaltung. Ich möchte eine Datenbankverbindung herstellen:Wie soll ich Programm machen, um zu stoppen und auf etwas zu warten? JAVA

UserLogManagerMainWindow Klasse hat eine Schaltfläche "Connect to database", klicken Sie auf DatabaseConnectionFrame initialisieren und einen Rahmen mit jlabels und jtextfields, nachdem ich alles, was ich brauche, ich drücke "Login" Ich möchte, dass meine UserLogManagerMainWindow-Klasse weiterhin die Protokolle aus der verbundenen Datenbank übermittelt.

Ich habe einige Code darüber geschrieben, wie es aussehen soll: „die Logik über was bin ich versucht zu sagen“

  connectToDatabaseBtn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       DatabaseConnectionFrame dcf = new DatabaseConnectionFrame(); 
       dcf.setVisible(true); 

       if(dcf.answer == true) { 
        importButtons(menuBar); 
        setJMenuBar(menuBar); 
        try { 
         DatabaseComm.getColumnNamesToPanel(model, titles); 
         projects = DatabaseComm.AddLogsToArrayReturnProjectNames(events); 
         DatabaseComm.fillDataToPanel(model, events, titles, row); 
         DatabaseComm.resizeColumnWidth(table); 
        } catch (SQLException e1) { 
         // TODO Auto-generated catch block 
         e1.printStackTrace(); 
        } 

       } 
       else { 
        System.out.println("not working"); 
       } 

      } 

     }); 

Aber wenn Anweisung arbeitet nicht, ich weiß, warum. Deshalb frage ich, wie es funktioniert? Wahrscheinlicher ist Threading der Schlüssel, aber im Moment nicht gut. Irgendwelche Tipps ohne Gewinde? Und wenn Threading der einzige Weg ist, kann ich Hilfe davon bekommen?

Geben DatabaseConnectionFrame Klasse unterhalb entweder:

package manager; 

import java.awt.BorderLayout; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 

import java.awt.GridBagLayout; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 

import java.awt.GridBagConstraints; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.net.InetAddress; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

import javax.swing.JTextField; 
import javax.swing.JPasswordField; 
import javax.swing.SwingConstants; 
import javax.swing.JButton; 

public class DatabaseConnectionFrame extends JFrame{ 

private JPanel contentPane; 
private JTextField address; 
private JPasswordField password; 
private JTextField username; 
private JButton btnLogin; 
private JButton btnCancel; 
private JLabel lblPort; 
private JTextField port; 

public boolean answer = false; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       DatabaseConnectionFrame frame = new DatabaseConnectionFrame(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public DatabaseConnectionFrame() { 
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    setSize(450,250); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    GridBagLayout gbl_contentPane = new GridBagLayout(); 
    contentPane.setLayout(gbl_contentPane); 

    JLabel lblDatabaseIpAddress = new JLabel("Database ip address:"); 
    GridBagConstraints gbc_lblDatabaseIpAddress = new GridBagConstraints(); 
    gbc_lblDatabaseIpAddress.anchor = GridBagConstraints.EAST; 
    gbc_lblDatabaseIpAddress.insets = new Insets(0, 0, 5, 5); 
    gbc_lblDatabaseIpAddress.gridx = 0; 
    gbc_lblDatabaseIpAddress.gridy = 0; 
    contentPane.add(lblDatabaseIpAddress, gbc_lblDatabaseIpAddress); 

    address = new JTextField(); 
    GridBagConstraints gbc_textField = new GridBagConstraints(); 
    gbc_textField.insets = new Insets(0, 0, 5, 0); 
    gbc_textField.fill = GridBagConstraints.HORIZONTAL; 
    gbc_textField.gridx = 1; 
    gbc_textField.gridy = 0; 
    contentPane.add(address, gbc_textField); 
    address.setColumns(10); 

    lblPort = new JLabel("Port"); 
    GridBagConstraints gbc_lblPort = new GridBagConstraints(); 
    gbc_lblPort.anchor = GridBagConstraints.EAST; 
    gbc_lblPort.insets = new Insets(0, 0, 5, 5); 
    gbc_lblPort.gridx = 0; 
    gbc_lblPort.gridy = 1; 
    contentPane.add(lblPort, gbc_lblPort); 

    port = new JTextField(); 
    GridBagConstraints gbc_textField1 = new GridBagConstraints(); 
    gbc_textField1.insets = new Insets(0, 0, 5, 0); 
    gbc_textField1.fill = GridBagConstraints.HORIZONTAL; 
    gbc_textField1.gridx = 1; 
    gbc_textField1.gridy = 1; 
    contentPane.add(port, gbc_textField1); 
    port.setColumns(10); 

    JLabel lblUsername = new JLabel("Username:"); 
    lblUsername.setHorizontalAlignment(SwingConstants.CENTER); 
    GridBagConstraints gbc_lblUsername = new GridBagConstraints(); 
    gbc_lblUsername.anchor = GridBagConstraints.EAST; 
    gbc_lblUsername.insets = new Insets(0, 0, 5, 5); 
    gbc_lblUsername.gridx = 0; 
    gbc_lblUsername.gridy = 2; 
    contentPane.add(lblUsername, gbc_lblUsername); 

    username = new JTextField(); 
    GridBagConstraints gbc_textField_1 = new GridBagConstraints(); 
    gbc_textField_1.insets = new Insets(0, 0, 5, 0); 
    gbc_textField_1.fill = GridBagConstraints.HORIZONTAL; 
    gbc_textField_1.gridx = 1; 
    gbc_textField_1.gridy = 2; 
    contentPane.add(username, gbc_textField_1); 
    username.setColumns(10); 

    JLabel lblPassword = new JLabel("Password"); 
    GridBagConstraints gbc_lblPassword = new GridBagConstraints(); 
    gbc_lblPassword.anchor = GridBagConstraints.EAST; 
    gbc_lblPassword.insets = new Insets(0, 0, 5, 5); 
    gbc_lblPassword.gridx = 0; 
    gbc_lblPassword.gridy = 3; 
    contentPane.add(lblPassword, gbc_lblPassword); 

    password = new JPasswordField(); 
    GridBagConstraints gbc_passwordField = new GridBagConstraints(); 
    gbc_passwordField.insets = new Insets(0, 0, 5, 0); 
    gbc_passwordField.fill = GridBagConstraints.HORIZONTAL; 
    gbc_passwordField.gridx = 1; 
    gbc_passwordField.gridy = 3; 
    contentPane.add(password, gbc_passwordField); 

    btnLogin = new JButton("Login"); 
    GridBagConstraints gbc_btnLogin = new GridBagConstraints(); 
    gbc_btnLogin.insets = new Insets(0, 0, 0, 5); 
    gbc_btnLogin.gridx = 0; 
    gbc_btnLogin.gridy = 4; 
    contentPane.add(btnLogin, gbc_btnLogin); 

    btnCancel = new JButton("Cancel"); 
    GridBagConstraints gbc_btnCancel = new GridBagConstraints(); 
    gbc_btnCancel.gridx = 1; 
    gbc_btnCancel.gridy = 4; 
    contentPane.add(btnCancel, gbc_btnCancel); 




    btnCancel.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 

      dispose(); 

     } 

    }); 

    btnLogin.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 

      String dbAddress = address.getText(); 
      String dbPort = port.getText(); 
      String dbUsername = username.getText(); 
      char[] dbPassword = password.getPassword(); 

      if(dbAddress.isEmpty() || dbPort.isEmpty() || dbUsername.isEmpty() || dbPassword.length == 0) { 
       JOptionPane.showMessageDialog(getParent(), 
         "All fields have to be filled!"); 
      } 
      else { 
       if(databaseValidation(dbAddress, dbPort, dbUsername, dbPassword)) { 
        JOptionPane.showMessageDialog(getParent(), 
          "Connected!"); 
        answer = true; 
        setVisible(false); 
       } 
       else { 
        JOptionPane.showMessageDialog(getParent(), 
          "There was error connecting to the database!"); 
        answer = false; 
       } 
      } 
      System.out.println(answer); 

     } 

    }); 
} 

public boolean databaseValidation(String address, String port, String username, char[] password) { 

    String pw = String.valueOf(password); 
    System.out.println(pw); 
    try { 
     Connection con = DriverManager.getConnection("jdbc:mysql://" + address + ":" + port + "/logctrl?user=" + username + "&password=" + pw); 
    } catch (SQLException e) { 
     System.out.println("Error connecting to database!"); 
     return false; 
    } 
    System.out.println("Connected"); 
    return true; 

} 

} 
+0

Es handelt sich nicht um ein Threading-Problem, sondern um einen Dialog, der die Codeausführung an der Stelle blockieren soll, an der sie sichtbar gemacht wurde (auf eine sichere Weise, die für die Verwendung geeignet ist) die UI) – MadProgrammer

+0

Siehe [Wie man Dialoge verwendet] (https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html) für weitere Details – MadProgrammer

+0

@MadProgrammer Ich denke du hast meinen Punkt .. ich gerade Kann ich die if-Anweisung nicht ausführen, irgendwelche Links zu denen ich sehen kann, um es klar zu machen? – Ervinas34

Antwort

1

Wenn Sie die Benutzereingabe warten möchten, haben Sie zwei Möglichkeiten, Sie entweder Ihre eigenen Beobachter Muster machen, die zu einem bestimmten Zeitpunkt in der Zukunft genannt werden kann, wenn ändert sich der Zustand in irgendeiner Weise verwenden Sie einen Dialog, der die Codes der Ausführung an dem Punkt, blockiert der Dialog sichtbar gemacht und warten, bis es

Siehe How to use dialogs für Details geschlossen ist

import java.awt.Frame; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class Test { 

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

    public Test() { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      JButton btn = new JButton("Show the dialog"); 
      add(btn); 

      btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        JDialog dialog = new JDialog((Frame)SwingUtilities.getWindowAncestor(TestPane.this), "I'm in charge now", true); 
        JButton btn = new JButton("Waiting"); 
        btn.addActionListener(new ActionListener() { 
         @Override 
         public void actionPerformed(ActionEvent e) { 
          dialog.dispose(); 
         } 
        }); 
        dialog.add(btn); 
        dialog.pack(); 
        dialog.setLocationRelativeTo(TestPane.this); 
        dialog.setVisible(true); 

        JOptionPane.showMessageDialog(TestPane.this, "You won't see this till the dialog is closed"); 
       } 
      }); 
     } 

    } 
} 
+0

Du bist ein Gott .. Habe es so gemacht, wie ich es will ! Danke vielmals! – Ervinas34

Verwandte Themen