所以我创建了一个名为savedName的变量,然后在动作侦听器方法中将其值设置为新值。它在动作侦听器中打印更改的值,但仅在动作侦听器中打印。似乎一旦动作监听器发生,变量的值就会变回" null" (默认值)。 username_txt是用户输入信息的文本字段。但正如我所说,该值仅在动作侦听器方法中暂时更改,并且一旦动作侦听器发生,它就会更改回默认值。我已经为savedName加上了语句。
public class LoginWindow extends javax.swing.JFrame {
/**
* Creates new form LoginWindow
*/
Connection conn = null;
ResultSet rs = null;
PreparedStatement pst = null;
**private String savedName;**
public LoginWindow() {
initComponents();
conn = JavaConnect.ConnecrDb();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String user_sql = "select * from Users where Username=? and Password=? ";
try{
pst = conn.prepareStatement(user_sql);
pst.setString(1, username_txt.getText());
savedName = username_txt.getText();
System.out.println(savedName);
pst.setString(2, password_txt.getText());
rs = pst.executeQuery();
if(rs.next()){
JOptionPane.showMessageDialog(null, "Wecome!");
rs.close();
pst.close();
this.dispose();
UserMainWindow wind = new UserMainWindow();
wind.setVisible(true);
}
else{
JOptionPane.showMessageDialog(null, "Username and/or Password is not correct");
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
finally {
try{
rs.close();
pst.close();
}
catch(Exception e){
}
}
}
答案 0 :(得分:0)
注意:我无法评论我的想法,所以我只是将其作为答案发布:)以下评论让我更新我的答案。
jButton2ActionPerformed
之后会发生什么?它将留在LoginWindow
课程中,是否会去另一个班级?如果是,则String savedName的值将返回null。
实例变量在类中声明,但在方法之外。他们 也称为成员或字段变量。分配对象时 在堆中,每个实例变量值都有一个插槽。 因此,在创建对象时会创建实例变量 当物体被摧毁时被摧毁。可见所有方法和 通常应该声明定义类的构造函数 私人,但可能会给予更大的知名度。 click here.
这是我的建议。
首先:
创建一个实例变量为public static String savedName = "";
E.g。
package com.sample.classes;
public class SampleClass {
public static String savedName = "";
}
然后,所有需要此变量的类必须像
一样扩展它 public class Sample2 extends SampleClass{
public void showUserName(){
System.out.println(SampleClass.savedName);
}
}
public class Sample1 extends SampleClass{
public void pressThisButton (String username){
SampleClass.savedName = username;
}
}
public static void main(String [] args){
Sample1 press = new Sample1();
// Populate the savedName variable
press.pressThisButton("My Name is Press");
// access savedName variable.
new Sample2().showUserName();
}
在这种情况下,即使您已经离开某个班级,您仍然可以使用savedName的值。
但我仍然不确定这个:),只是评论是否有更正TIA
答案 1 :(得分:0)
您从另一个类获取null是因为您正在创建一个新对象,而不是将该值传递给另一个类。这可以通过在UserMainWindow类中放置一个构造函数并接受名称的String来完成。 如果你已经有一个构造函数,只需接受String作为参数,并为字符串创建一个变量并设置它..
示例代码:(注意这是UserMainWindow类)
private String savedName;
public UserMainWindow(String savedName){
this.savedName = savedName;
}
现在你正在创建这个对象的类,传递给它的字符串如下:(这是你创建userMainWindow类的类)
UserMainWindow wind = new UserMainWindow(savedName);
现在你应该将savedName保存在你的另一帧(用户主窗口)中,而另一帧则被丢弃。