我在运行程序时收到此消息。我该如何更正此错误?我在评论中标记了这条线!
消息:
线程“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)//``
}
}
答案 0 :(得分:2)
使用更好的变量名称,因此阅读代码的人(包括未来的代码)可以告诉您发生了什么。
正如Hovercraft Full Of Eels在评论中所说,不要运行无法编译的代码。编译器错误......不是你的朋友,但他们会帮助你。
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"))