无法编译的源代码错误?

时间:2014-07-17 11:47:41

标签: java swing

我在运行程序时收到此消息。我该如何更正此错误?我在评论中标记了这条线!

消息:

  

线程“main”中的异常java.lang.RuntimeException:无法编译的源代码 -       错误的sym类型:javax.swing.JPanel.add       at login.Login.frame(Login.java:52)       at login.Login。(Login.java:24)       at login.Login.main(Login.java:103)       建立成功(总时间:16秒)

和我的代码

package login;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;


public class Login 
{

    Connection con;
    Statement st;
    ResultSet rs; 

    JFrame f = new JFrame("User login");
    JLabel l = new JLabel("Username:");
    JLabel l1 = new JLabel("Password:");
    JTextField t = new JTextField(10);
    JTextField t1 = new JTextField(10);
    JButton b = new JButton("login");


    public Login()
    {
        connect();
        frame(); //this line:at login.Login.<init>(Login.java:24)//

    }

    public void connect()
    {

        try 
        {
            String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
            Class.forName(driver);

            String db = "jdbc:odbc:login";
            con = DriverManager.getConnection(db);   
            st = con.createStatement();
        }
        catch(Exception ex)
        {
        }
    }

    public void frame()
    {
        f.setSize(600,400);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);

        JPanel p = new JPanel();
        p.add(1);//this line:at login.Login.frame(Login.java:52)//
        p.add(t);
        p.add(11);
        p.add(t1);
        p.add(b);

        f.add(p);

        b.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    String user = t.getText().trim();
                    String pass = t1.getText().trim();  

                    String sql = "select user,pass from login where user = '"+user+"'and pass = '"+pass+"'";
                    rs = st.executeQuery(sql);

                    int count = 0;
                    while(rs.next())
                    {
                        count = count + 1;
                    }

                    if(count == 1)
                    {
                        JOptionPane.showMessageDialog(null,"User Found,Access Generated!");
                    }
                    else if(count > 1)
                    {
                        JOptionPane.showMessageDialog(null, "Duplicate User,Access Denied!");
                    }
                    else
                    {
                        JOptionPane.showMessageDialog(null,"User not Found");
                    }
                }
                catch(Exception ex)
                {
                }

            }
        });
    }

    public static void main(String[] arg) 
    {
        new Login(); //this line:at login.Login.main(Login.java:103)//``
    }

}

4 个答案:

答案 0 :(得分:2)

  1. 使用更好的变量名称,因此阅读代码的人(包括未来的代码)可以告诉您发生了什么。

  2. 正如Hovercraft Full Of Eels在评论中所说,不要运行无法编译的代码。编译器错误......不是你的朋友,但他们会帮助你。

  3. JPanel有多个.add()方法,但是没有一个只接受一个int作为参数,这就是你在login.Login.frame(Login.java:52)中所拥有的,然后再一次从那里下来两行,这就是导致你的代码无法编译的原因。我认为你实际上是指l(el)和l1(el one)而不是1(one)和11(11),它们反馈到上面的#1:使用更好的变量名称!

答案 1 :(得分:1)

您正在尝试向JPanel添加一个数字,这对Java编译器(或对我来说)没有意义。无论如何,你打算用myJPanel.add(1)做什么?

答案 2 :(得分:1)

您需要'l'('L')代替'1' -one

p.add(l);
p.add(l1);

因为您要添加以下标签

JLabel l = new JLabel("Username:");
JLabel l1 = new JLabel("Password:");

答案 3 :(得分:1)

您必须将Component添加到Panel

如果您想添加号码,请尝试add(new JLabel("1"))