变量作为 null 传递给 Netbeans 中的另一个 Java 框架
Variables passes as null to another Java Frame in Netbeans
我正在尝试从 MSSQL 中获取一个值到 class。在我的登录 GUI 框架中,变量传递完全正确,但是当我将那个 class 对象传递给另一个框架时,名称 (String ograd) 变量 returns 为空。
这是 teachermanagement.java 文件:
package Model;
public class teachermanagement {
private int ogrID;
String ograd, ogrsoyad;
public teachermanagement(String ograd, String ogrsoyad) {
this.ograd = ograd;
this.ogrsoyad = ogrsoyad;
}
public int getogrID() {
return ogrID;
}
public void setogrID(int ogrID) {
this.ogrID = ogrID;
}
public String getograd() {
return ograd;
}
public void setograd(String ograd) {
this.ograd = ograd;
}
public String getogrsoyad() {
return ogrsoyad;
}
public void setogrsoyad(String ogrsoyad) {
this.ogrsoyad = ogrsoyad;
}
}
loginGUI.java 文件,我通过单击按钮从我的 MSSQL 数据库中获取变量,工作正常。
package View;
import Helper.dbconnection;
import Model.teachermanagement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class logingui extends javax.swing.JFrame {
private dbconnection conn = new dbconnection();
public logingui() {
initComponents();
}
@SuppressWarnings("unchecked")
Generated Code
private void ogretmenadActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
if(ogretmenad.getText().length() == 0 | ogretmenpw.getText().length() == 0)
JOptionPane.showMessageDialog(null, "Lütfen tüm alanları doldurunuz.", "Uyarı", JOptionPane.INFORMATION_MESSAGE);
else {
try {
Connection con = conn.DBConn();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * from ogretmen");
while(rs.next()) {
if(ogretmenad.getText().equals(rs.getString("ograd")) && ogretmenpw.getText().equals(rs.getString("ogrsifre"))) {
teachermanagement tm = new teachermanagement();
tm.setogrID(rs.getInt("ogrID"));
tm.setograd(rs.getString("ograd"));
tm.setogrsoyad(rs.getString("ogrsoyad"));
//THIS IS WHERE I TRY TO PASS NAME VARIABLE TO ANOTHER FRAME
ogretmengui tgui = new ogretmengui(tm);
tgui.setVisible(true);
dispose();
}
}
} catch (SQLException ex) {
System.out.println(ex);
}
}
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(logingui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(logingui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(logingui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(logingui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new logingui().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JTextField ogretmenad;
private javax.swing.JPasswordField ogretmenpw;
// End of variables declaration
}
dbconnection.java 在 Helper 包中:
package Helper;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class dbconnection {
Connection c = null;
public dbconnection() {}
public Connection DBConn() {
try {
this.c = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; databaseName=schoolms", "sa", "1234");
return c;
} catch (SQLException ex) {
Logger.getLogger(dbconnection.class.getName()).log(Level.SEVERE, null, ex);
}
return c;
}
}
这是我试图将变量传递给的 teacherGUI 框架:
package View;
import Model.teachermanagement;
public class ogretmengui extends javax.swing.JFrame {
static teachermanagement ogr = new teachermanagement();
public ogretmengui(teachermanagement ogr) {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("OKUL YÖNETİMİ SİSTEMİ");
setResizable(false);
jLabel1.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
jLabel1.setText("Hoşgeldiniz, " + ogr.getograd());
jButton1.setText("Çıkış Yap");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addComponent(jButton1)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(262, Short.MAX_VALUE))
);
pack();
setLocationRelativeTo(null);
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ogretmengui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ogretmengui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ogretmengui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ogretmengui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ogretmengui frame = new ogretmengui(ogr);
frame.setVisible(true);
}
catch (Exception ex) {
System.out.println(ex);
}
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
// End of variables declaration }
如您在 teacherGUI.java 中所见,我正在尝试使用从 loginGUI 框架中获取的变量更改标签文本,但它 returns 为 NULL。当我尝试在 loginGUI 中打印变量时,它 returns 是正确的值,但在 teacherGUI 框架中情况并非如此。任何帮助将不胜感激。
PS: 我隐藏了 loginGUI innit 组件以缩短代码,因为该文件没有任何问题。
您创建了过多的教师管理对象并忽略了传递给构造函数的参数:
代码 1:
// create a new teachermanagement object here
teachermanagement tm = new teachermanagement();
// .....
// and pass it into a constructor here:
ogretmengui tgui = new ogretmengui(tm);
tgui.setVisible(true);
dispose();
但是你在构造函数中忽略了 tm 对象:
public class ogretmengui extends javax.swing.JFrame {
static teachermanagement ogr = new teachermanagement(); // object 1
// ogr passed into the constructor is object 2, and is ignored
public ogretmengui(teachermanagement ogr) {
initComponents();
}
相反,您不应该在 ogretmengui class 中创建一个新的教师管理,而是使用参数来设置一个字段:
public class ogretmengui extends javax.swing.JFrame {
// should not be static
// static teachermanagement ogr = new teachermanagement(); // object 1
private teachermanagement ogr; // should not be static and should not be initialized
// ogr passed into the constructor and used to set the variable:
public ogretmengui(teachermanagement ogr) {
this.ogr = ogr; // ***** here *****
initComponents();
}
您可能还会 运行 遇到问题,因为 JFrames 不是 modal 并且不会阻止程序流(例如 JOptionPane 或模态 JDialog 会)。请看一下 The Use of Multiple JFrames: Good or Bad Practice?.
此外,虽然与您的问题无关,但请考虑查看 this Java Naming Conventions 文档:Class 名称应以大写字母开头,变量以小写字母开头。同样,这与您的实际问题或问题无关,但通过遵循这些约定,您将使其他人(我们)更容易理解您的代码,这通常是一件好事。
我正在尝试从 MSSQL 中获取一个值到 class。在我的登录 GUI 框架中,变量传递完全正确,但是当我将那个 class 对象传递给另一个框架时,名称 (String ograd) 变量 returns 为空。
这是 teachermanagement.java 文件:
package Model;
public class teachermanagement {
private int ogrID;
String ograd, ogrsoyad;
public teachermanagement(String ograd, String ogrsoyad) {
this.ograd = ograd;
this.ogrsoyad = ogrsoyad;
}
public int getogrID() {
return ogrID;
}
public void setogrID(int ogrID) {
this.ogrID = ogrID;
}
public String getograd() {
return ograd;
}
public void setograd(String ograd) {
this.ograd = ograd;
}
public String getogrsoyad() {
return ogrsoyad;
}
public void setogrsoyad(String ogrsoyad) {
this.ogrsoyad = ogrsoyad;
}
}
loginGUI.java 文件,我通过单击按钮从我的 MSSQL 数据库中获取变量,工作正常。
package View;
import Helper.dbconnection;
import Model.teachermanagement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class logingui extends javax.swing.JFrame {
private dbconnection conn = new dbconnection();
public logingui() {
initComponents();
}
@SuppressWarnings("unchecked")
Generated Code
private void ogretmenadActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
if(ogretmenad.getText().length() == 0 | ogretmenpw.getText().length() == 0)
JOptionPane.showMessageDialog(null, "Lütfen tüm alanları doldurunuz.", "Uyarı", JOptionPane.INFORMATION_MESSAGE);
else {
try {
Connection con = conn.DBConn();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * from ogretmen");
while(rs.next()) {
if(ogretmenad.getText().equals(rs.getString("ograd")) && ogretmenpw.getText().equals(rs.getString("ogrsifre"))) {
teachermanagement tm = new teachermanagement();
tm.setogrID(rs.getInt("ogrID"));
tm.setograd(rs.getString("ograd"));
tm.setogrsoyad(rs.getString("ogrsoyad"));
//THIS IS WHERE I TRY TO PASS NAME VARIABLE TO ANOTHER FRAME
ogretmengui tgui = new ogretmengui(tm);
tgui.setVisible(true);
dispose();
}
}
} catch (SQLException ex) {
System.out.println(ex);
}
}
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(logingui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(logingui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(logingui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(logingui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new logingui().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JTextField ogretmenad;
private javax.swing.JPasswordField ogretmenpw;
// End of variables declaration
}
dbconnection.java 在 Helper 包中:
package Helper;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class dbconnection {
Connection c = null;
public dbconnection() {}
public Connection DBConn() {
try {
this.c = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; databaseName=schoolms", "sa", "1234");
return c;
} catch (SQLException ex) {
Logger.getLogger(dbconnection.class.getName()).log(Level.SEVERE, null, ex);
}
return c;
}
}
这是我试图将变量传递给的 teacherGUI 框架:
package View;
import Model.teachermanagement;
public class ogretmengui extends javax.swing.JFrame {
static teachermanagement ogr = new teachermanagement();
public ogretmengui(teachermanagement ogr) {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("OKUL YÖNETİMİ SİSTEMİ");
setResizable(false);
jLabel1.setFont(new java.awt.Font("Dialog", 1, 14)); // NOI18N
jLabel1.setText("Hoşgeldiniz, " + ogr.getograd());
jButton1.setText("Çıkış Yap");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addComponent(jButton1)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(262, Short.MAX_VALUE))
);
pack();
setLocationRelativeTo(null);
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
}
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ogretmengui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ogretmengui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ogretmengui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ogretmengui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ogretmengui frame = new ogretmengui(ogr);
frame.setVisible(true);
}
catch (Exception ex) {
System.out.println(ex);
}
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
// End of variables declaration }
如您在 teacherGUI.java 中所见,我正在尝试使用从 loginGUI 框架中获取的变量更改标签文本,但它 returns 为 NULL。当我尝试在 loginGUI 中打印变量时,它 returns 是正确的值,但在 teacherGUI 框架中情况并非如此。任何帮助将不胜感激。
PS: 我隐藏了 loginGUI innit 组件以缩短代码,因为该文件没有任何问题。
您创建了过多的教师管理对象并忽略了传递给构造函数的参数:
代码 1:
// create a new teachermanagement object here
teachermanagement tm = new teachermanagement();
// .....
// and pass it into a constructor here:
ogretmengui tgui = new ogretmengui(tm);
tgui.setVisible(true);
dispose();
但是你在构造函数中忽略了 tm 对象:
public class ogretmengui extends javax.swing.JFrame {
static teachermanagement ogr = new teachermanagement(); // object 1
// ogr passed into the constructor is object 2, and is ignored
public ogretmengui(teachermanagement ogr) {
initComponents();
}
相反,您不应该在 ogretmengui class 中创建一个新的教师管理,而是使用参数来设置一个字段:
public class ogretmengui extends javax.swing.JFrame {
// should not be static
// static teachermanagement ogr = new teachermanagement(); // object 1
private teachermanagement ogr; // should not be static and should not be initialized
// ogr passed into the constructor and used to set the variable:
public ogretmengui(teachermanagement ogr) {
this.ogr = ogr; // ***** here *****
initComponents();
}
您可能还会 运行 遇到问题,因为 JFrames 不是 modal 并且不会阻止程序流(例如 JOptionPane 或模态 JDialog 会)。请看一下 The Use of Multiple JFrames: Good or Bad Practice?.
此外,虽然与您的问题无关,但请考虑查看 this Java Naming Conventions 文档:Class 名称应以大写字母开头,变量以小写字母开头。同样,这与您的实际问题或问题无关,但通过遵循这些约定,您将使其他人(我们)更容易理解您的代码,这通常是一件好事。