两个不同类的对象创建抛出Java中的*
我一直在努力解决这个问题一段时间,我有两个类,即OrderSearch.java
(主类)和CreateOrder.java
。我的主class
上有一个JTable
,当一行被双击时,它会打开一个新框架,即CreateOrder.java
,其值在jTable
之间的不同文本框中。我在CreateOrder.java中有一个SaveButton
,它保存在该类中所做的更改并再次显示JTable
。两个不同类的对象创建抛出Java中的*
但是,问题是我不能执行刷新表操作,即单击SaveButton时的一些SQL查询。我希望框架中的表OrderSearch在点击CreateOrder上的保存按钮时被刷新
问题:为CreateOrder.java中的类OrderSearch.java创建一个对象给了我一个*错误。在保存按钮中创建一个对象再次打开一个新的框架。
OrderSearch.java
public class OrderSearch extends CreateOrder{
//declarations for label,text, and buttons
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
OrderSearch window = new OrderSearch();
window.frmXraymanager.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
public OrderSearch() { *Stack overflow error here*
initialize();
}
private void initialize() {
table = new JTable();
scrollPane.setViewportView(table);
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e2) {
if (e2.getClickCount() == 2 && !e2.isConsumed()) {
e2.consume();
try{
int index = table.getSelectedRow();
String table_Click = table.getModel().getValueAt(table.convertRowIndexToModel(index), 0).toString();
String sql = "SELECT ID, Date, Place, UserName FROM TEST.dbo.Intern WHERE ID = '"+table_Click+"'";
PreparedStatement pst = connection.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
if(rs.next()){
String id = rs.getString("ID");
String date = rs.getString("Date").toString();
String place = rs.getString("Place");
String uname = rs.getString("UserName");
frameCreate.setVisible(true); //Frame from CreateOrder.java
Number.setText(id); // textfields from CreateOrder.java
String date1 = startDate;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
Date date2 = df.parse(date1);
dateChooser.setDate(date2);
jobSite.setText(place);
uName.setText(uname);
Component.setText(component);
Remarks.setText(remarks);
rs.close();
pst.close();
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
}
});
}
public void refresh()
{
query1 = "SELECT * FROM Test.dbo.Intern;
try(PreparedStatement pst = connection.prepareStatement(query1);
ResultSet rs = pst.executeQuery();){
table.setModel(DbUtils.resultSetToTableModel(rs));
table.setRowHeight(40);
}
catch(Exception e){
e.printStackTrace();
}
}
}
CreateOrder.java
public class CreateOrder {
public CreateOrder() {
initialize();
}
OrderSearch one = new OrderSearch(); *Stack overflow error here*
private void initialize() {
button_Save = new JButton("Save");
button_Save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
*would like to add refresh() here*
}
});
}
}
我应该如何创建CreateOrder OrderSearch的目的是存取权限的方法refresh()
没有再次打开框架?
在此先感谢!
-Ajay
编辑:
其实,误差值在
OrderSearch one = new OrderSearch();
和公共OrderSearch()
我完全理解这是有道理的,因为它进入无限循环,当我拨打CreateOrder对象的.java。但有什么办法可以访问CreateOrder.java中的OrderSearch.java的内容,而不会出现*错误或再次打开整个新框架OrderSearch.java?
不,没有办法做到这一点假设你目前的设置。这导致我们得出结论,您需要重构代码。主要的问题是你的代码没有办法在不创建框架的情况下执行所需的db命令。您将需要separate the engine from the ui。您将需要能够执行业务逻辑,而不会受限于UI事件。 UI应该是业务逻辑的用户,而不是其包装。您需要将所有业务逻辑转移到单独的类中,并在相应的地点和事件中从ui调用相关方法。
可能会重构您的代码,以便SQL可以调用另一个类, –
@ScaryWombat感谢您的回复。但是,jTable呢? 我的意思是如果我创建一个类刷新扩展OrderSearch {}'它会再次给我*错误。对不起,我是java中的一个newby – Ajay
为什么要扩展'OrderSearch'在我看来,这个重构后的代码应该能够独立运行,而不管你将它连接到什么地方。松散耦合的代码是目标 –