你会怎么做?
在使用netbeans时,我似乎在java中遇到了无限循环的基本问题。我将数据插入到一个表中,该表将所有数据写入xml文件。 xml文件正在被写入,但它会进入一个无限循环,而它应该添加到表中并扩展自己,只要我为每个条目行添加新值。所以我甚至无法将一行数据输入到打印行的表中,而程序不会进入循环。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
DefaultTableModel model=(DefaultTableModel) jTable_tableDemo.getModel();
model.addRow(new Object[]{jTextField_Name.getText(),jTextField_Address.getText(),jTextField_Phone.getText()});
try {
int i = 0;
Document doc = new Document();
Element theRoot = new Element("models");
doc.setRootElement(theRoot);
while (jTextField_Name.getText()!=""){
i++;
Element models = new Element("model"+i);
Element name1 = new Element("name"+i);
Element address1 = new Element("address"+i);
Element phone1 = new Element("phone"+i);
name1.setAttribute("name_id",""+i);
name1.addContent(new Text(jTextField_Name.getText()));
address1.setAttribute("address_id",""+i);
address1.addContent(new Text(jTextField_Address.getText()));
phone1.setAttribute("phone_id",""+i);
phone1.addContent(new Text(jTextField_Phone.getText()));
models.addContent(name1);
models.addContent(address1);
models.addContent(phone1);
theRoot.addContent(models);
XMLOutputter xmlOutput = new XMLOutputter(Format.getPrettyFormat());
xmlOutput.output(doc, new FileOutputStream(new File("./src/jdomMade.xml")));
System.out.println("Wrote to File");
}
}
catch (Exception ex){
ex.printStackTrace();
}
}
Pic of Table Before Entering Data In Fields
Pic of Table After Entering Data In Fields When Application Freezes After Going On An Infinite Loop 这是为jdomMade.xml文件打印的XML文件:
请通过删除无限循环并仅打印我在表格中输入数据的次数,让我知道如何解决此问题。非常感谢。
<?xml version="1.0" encoding="UTF-8"?>
<models>
<model1>
<name1 name_id="1">sdgsdfg</name1>
<address1 address_id="1">sdgsdg</address1>
<phone1 phone_id="1">sdgsg</phone1>
</model1>
..... 直到模型无限......
我可以解决它的任何方式,以便没有无限循环,并且我在表中输入的唯一数据被传输和打印到jdomMade.xml文件中?
非常感谢您的所有帮助!
答案 0 :(得分:0)
您正在使用以下条件打开循环
while (jTextField_Name.getText()!="")
然后在表格中添加值。
但是一旦添加了值,您就不会修改jTextField_Name
,因此条件始终成立,并且您的代码进入无限循环。
将您的try块更改为此类
Document doc = new Document();
Element theRoot = new Element("models");
doc.setRootElement(theRoot);
i++;
Element models = new Element("model"+i);
Element name1 = new Element("name"+i);
Element address1 = new Element("address"+i);
Element phone1 = new Element("phone"+i);
name1.setAttribute("name_id",""+i);
name1.addContent(new Text(jTextField_Name.getText()));
address1.setAttribute("address_id",""+i);
address1.addContent(new Text(jTextField_Address.getText()));
phone1.setAttribute("phone_id",""+i);
phone1.addContent(new Text(jTextField_Phone.getText()));
models.addContent(name1);
models.addContent(address1);
models.addContent(phone1);
theRoot.addContent(models);
XMLOutputter xmlOutput = new XMLOutputter(Format.getPrettyFormat());
xmlOutput.output(doc, new FileOutputStream(new File("./src/jdomMade.xml")));
System.out.println("Wrote to File");
//clearing fields
jTextField_Name.setText("");
jTextField_Address.setText("");
jTextField_Phone.setText("");
将i
设置为全局变量设置为零。
您正在再次创建相同的文档,因此它将覆盖以前的值。创建一个文件类型全局变量,然后像这样使用它
xmlOutput.output(doc, new FileOutputStream(myFile));
希望这会有所帮助:)