Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java获取堆栈溢出程序不是递归的_Java_Swing_Recursion_Stack Overflow - Fatal编程技术网

java获取堆栈溢出程序不是递归的

java获取堆栈溢出程序不是递归的,java,swing,recursion,stack-overflow,Java,Swing,Recursion,Stack Overflow,我一直在做我的“随机琐事”程序,我不断得到没有递归性的堆栈溢出,至少我找不到任何堆栈溢出,下面是Gui.java的代码,它是主类(也是唯一的类) package mods.giantnuker.random_琐事; 导入java.awt.event.ActionEvent; 导入org.w3c.dom.Element; 导入org.w3c.dom.NodeList; 导入java.awt.event.ActionListener; 导入java.awt.event.ItemEvent; 导入ja

我一直在做我的“随机琐事”程序,我不断得到没有递归性的堆栈溢出,至少我找不到任何堆栈溢出,下面是Gui.java的代码,它是主类(也是唯一的类)

package mods.giantnuker.random_琐事;
导入java.awt.event.ActionEvent;
导入org.w3c.dom.Element;
导入org.w3c.dom.NodeList;
导入java.awt.event.ActionListener;
导入java.awt.event.ItemEvent;
导入java.awt.event.ItemListener;
导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Map;
导入javax.swing.BoxLayout;
导入javax.swing.JButton;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform.TransformerException;
导入javax.xml.transform.TransformerFactoryConfigurationError;
导入mods.giantnuker.javautil.FileFilterAccessor;
导入mods.giantnuker.javautil.Pair;
导入mods.giantnuker.javautil.PairList;
导入mods.giantnuker.javautil.file.parser.XMLParser;
导入javax.swing.JFileChooser;
@抑制警告(“串行”)
公共类Gui扩展JFrame实现ActionListener、ItemListener{
字符串tsn;
JFileChooser拨号;
欢迎你,纽特;
JButton sbttn、nbttn、ebttn、nqb、nab、dqb、dab、sav、ext;
@抑制警告(“原始类型”)
JComboBox问题、答案;
列出琐事;
公共静态void main(字符串[]args){
新Gui();
}
@SuppressWarnings({“静态访问”、“rawtypes”})
公共图形用户界面(){
超级(“随机琐事”);
这个。设置大小(300250);
此.setDefaultCloseOperation(此.EXIT在关闭时退出);
//新的
newt=新的JPanel();
newt.setLayout(新的BoxLayout(newt,BoxLayout.Y_轴));
问题=新的JComboBox();
问题。addItemListener(本);
answers=新JComboBox();
nqb=新的JButton(“新问题+”);
nab=新的JButton(“新答案+”);
dqb=新的JButton(“-删除问题”);
dab=新按钮(“-删除答案”);
sav=新的JButton(“*保存”);
ext=新的JButton(“-Exit-”);
nqb.addActionListener(本);
nab.addActionListener(本);
dqb.addActionListener(本);
dab.addActionListener(本);
sav.addActionListener(此);
ext.addActionListener(这个);
新增(问题);
新增(答案);
新增(nqb);
新增(nab);
新增(dqb);
新增(dab);
新增(sav);
新增(ext);
//欢迎光临
欢迎=新JPanel();
welcome.setLayout(新的BoxLayout(welcome,BoxLayout.Y_轴));
欢迎添加(新JLabel(“欢迎访问随机琐事”);
欢迎添加(sbttn=newjbutton(“选择要使用的文件(.trv));
欢迎添加(nbttn=newjbutton(“创建一个新按钮”);
欢迎添加(ebttn=newjbutton(“或编辑旧按钮”);
sbttn.addActionListener(此);
nbttn.addActionListener(此);
ebttn.addActionListener(此);
dialg=newjfilechooser();
拨号设置对话框类型(拨号打开对话框);
拨打setFileFilter(新的FileFilterAccessor(“trv”);
这个。添加(欢迎);
此.setVisible(true);
}
@SuppressWarnings({“未选中”、“原始类型”、“静态访问”})
@凌驾
已执行的公共无效操作(操作事件arg0){
对象src=arg0.getSource();
如果(src==sbttn){
拨号设置对话框类型(拨号打开对话框);
列表琐事=新建ArrayList();
int out=dialg.showOpenDialog(null);
如果(out==0){
文件f=dialg.getSelectedFile();
}
}
如果(src==nbttn){
琐事=新的ArrayList();
这个。移除(欢迎);
本条增补(牛顿);
此.setVisible(true);
}
如果(src==ebttn){
拨号设置对话框类型(拨号打开对话框);
int out=dialg.showOpenDialog(null);
如果(out==0){
trivia=parse(dialg.getSelectedFile());
这个。移除(欢迎);
本条增补(牛顿);
ref();
此.setVisible(true);
}
}
如果(src==ext){
这个。删除(newt);
这个。添加(欢迎);
此.setVisible(true);
}
如果(src==nqb){
String txt=JOptionPane.showInputDialog(这是“输入问题:”,“问题…”);
如果(txt.length()>0&&!txt.equals(“问题…”)){
添加(新对(txt,newpairlist());
问题.补充项目(txt);
}
}
如果(src==nab){
if(questions.getItemCount()==0){
showMessageDialog(这是“您必须选择一个问题或创建一个问题!”,“错误”,JOptionPane.WARNING_消息);
返回;
}
String txt=JOptionPane.showInputDialog(这是“输入答案:”和“答案…”);
String txt2=JOptionPane.showInputDialog(这是“输入答案的点数:”,“点数…”);
如果(txt.length()>0&&!txt.equals(“回答…”){
如果(txt2.length()>0&&!txt2.equals(“点…”)){
积分=0;
布尔err=true;
虽然(错误){
试一试{
点=整数。值(txt2);
错误=错误;
}捕获(数字格式){
txt2=JOptionPane.showInputDialog(这是“输入答案的点数:”,“点数…”);
如果(txt2.等于(“点…”)返回;
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<trivia name="Dummy Trivia">
    <question text="dum">
        <answer points="1" text="ans1"/>
    </question><question text="dum2">
        <answer points="1" text="ans1"/>
        <answer points="2" text="ans2"/>
    </question>
    <question text="dum3">
        <answer points="1" text="ans1"/>
        <answer points="2" text="ans2"/>
        <answer points="3" text="ans3"/>
    </question>
</trivia>
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
    at javax.swing.plaf.basic.BasicComboBoxUI$Handler.contentsChanged(BasicComboBoxUI.java:1858)
    at javax.swing.plaf.basic.BasicComboBoxUI$Handler.intervalRemoved(BasicComboBoxUI.java:1877)
    at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:179)
    at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxModel.java:174)
    at javax.swing.JComboBox.removeAllItems(JComboBox.java:771)
    at mods.giantnuker.random_trivia.Gui.ref(Gui.java:264)
    at mods.giantnuker.random_trivia.Gui.itemStateChanged(Gui.java:258)
    at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)
    at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1329)
    at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
    at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
    at javax.swing.DefaultComboBoxModel.addElement(DefaultComboBoxModel.java:131)
    at javax.swing.JComboBox.addItem(JComboBox.java:716)
    at mods.giantnuker.random_trivia.Gui.ref(Gui.java:267)
    at mods.giantnuker.random_trivia.Gui.itemStateChanged(Gui.java:258)
    at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)
    at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1271)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1329)
    at javax.swing.JComboBox.intervalRemoved(JComboBox.java:1351)
    at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:179)
    at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxModel.java:174)
    at javax.swing.JComboBox.removeAllItems(JComboBox.java:771)
    at mods.giantnuker.random_trivia.Gui.ref(Gui.java:264)
    at mods.giantnuker.random_trivia.Gui.itemStateChanged(Gui.java:258)
    at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)
    at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1329)
    at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
    at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
    at javax.swing.DefaultComboBoxModel.addElement(DefaultComboBoxModel.java:131)
    at javax.swing.JComboBox.addItem(JComboBox.java:716)
    at mods.giantnuker.random_trivia.Gui.ref(Gui.java:267)
boolean err = true;
while(err) {  
    try {
        points = Integer.valueOf(txt2);
        err = false;
    } catch (NumberFormatException e) {
        txt2 = JOptionPane.showInputDialog(this, "Enter the amount of points for the Answer:", "Points...");
        if (txt2.equals("Points...")) 
            return;
    }
}
@Override
public void itemStateChanged(ItemEvent arg0) {
    Object src = arg0.getSource();
    if (src == questions) {
        ref();
    }
}

@SuppressWarnings("unchecked")
public void ref() {
    questions.removeAllItems();
    answers.removeAllItems();

    ...
public void ref() {
    // first remove all item listeners
    ItemListener[] questionListeners = questions.getItemListeners();
    ItemListener[] answerListeners = answers.getItemListeners();

    for (ItemListener l : questionListeners) {
        questions.removeItemListener(l);
    }
    for (ItemListener l : answerListeners) {
        answers.removeItemListener(l);
    }

    // change state
    questions.removeAllItems();
    answers.removeAllItems();

    // re-add all listeners
    for (ItemListener l : questionListeners) {
        questions.addItemListener(l);
    }
    for (ItemListener l : answerListeners) {
        answers.addItemListener(l);
    }

    ...