0

我已经在 J​​AVA 中启动了一个程序,有时,当我运行或调试它时,它会显示一个空白的空白窗口。我不知道为什么,但我重新调试它并正确显示窗口。顺便说一句,它与最后的 mysql connect void 无关。

这是代码:

package com.hinx.client;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.sql.*;


public class Main {

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


static void createWindow()
{


    //Create panel
    JPanel content = new JPanel();
    content.setLayout(null);
    //Build the frame
    JFrame frame = new JFrame("Hinx - A marketplace for apps - Client ALPHA_0.0.1");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(700, 233);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.add(content);
    frame.setVisible(true);

    //Create username label
    JLabel username = new JLabel("Username:");
    username.setFont(new Font("Arial", Font.BOLD, 15));
    username.setForeground(Color.white);
    username.setBounds(34, 8, 100, 50);

    //Create password label
    JLabel password = new JLabel("Password:");
    password.setFont(new Font("Arial", Font.BOLD, 15));
    password.setForeground(Color.white);
    password.setBounds(36, 85, 100, 50);

    //Create username field
    JTextField usernamet = new JTextField(20);
    usernamet.setBounds(12, 50, 125, 30);
    usernamet.setBorder(javax.swing.BorderFactory.createEmptyBorder());

    //Create password field
    JTextField passwordt = new JTextField(20);
    passwordt.setBounds(12, 125, 125, 30);
    passwordt.setBorder(javax.swing.BorderFactory.createEmptyBorder());

    //Add the login button
    JButton login = new JButton("Login");
    login.setBounds(0, 175, 150, 30);
    login.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {

        }
    });

    //Create login panel
    JPanel loginpanel = new JPanel();
    loginpanel.setLayout(null);
    loginpanel.setBounds(0, 0, 150, 400);
    loginpanel.setBackground(Color.gray);

    //Add the items to the loginpanel
    loginpanel.add(username);
    loginpanel.add(password);
    loginpanel.add(usernamet);
    loginpanel.add(passwordt);
    loginpanel.add(login);

    //Add the items to the content panel
    content.add(loginpanel);
}

protected void connect()
{
    String driver = "com.mysql.jdbc.Driver";
    String dbadress = "";
    String dbname = "";
    String username = "";
    String password = "";
    try
    {
        Class.forName(driver).newInstance();
        Connection conn = DriverManager.getConnection(dbadress+dbname, username,password);
        Statement st = conn.createStatement();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

}
4

3 回答 3

2
frame.setVisible(true);

在将所有组件添加到 JFrame 之后,将其设为最后一条语句。


此外,在 GUI 线程 (EDT) 中执行任何与 swing 相关的代码通常是最佳实践:

public static void main(String[] args)
{
    SwingUtilities.invokeLater(new Runnable()
    {
        @Override
        public void run()
        {
            createWindow();
        }
    });
}
于 2013-05-03T15:01:55.073 回答
2

Swing GUI 应该在 Event Dispatch Thread 上启动。有关更多详细信息,请参阅初始线程

于 2013-05-03T15:02:32.853 回答
1

frame.setVisible(true);在方法结束时调用(将所有组件添加到面板之后)

于 2013-05-03T15:06:17.033 回答