Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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.lang.StackOverflowerError actionListeners_Java_User Interface_Actionlistener - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.StackOverflowerError actionListeners

“线程中的异常”;“主要”;java.lang.StackOverflowerError actionListeners,java,user-interface,actionlistener,Java,User Interface,Actionlistener,我是Java新手。。。我有了构建科学计算器的想法,在我实现了一些actionListeners之后,我得到了以下错误 线程“main”java.lang.StackOverflowerr中出现异常 在java.awt.Insets。(Insets.java:103) 位于sun.awt.windows.WToolkit.getScreenInsets(本机方法) 在sun.awt.windows.WToolkit.getScreenInsetts(WToolkit.java:567)上 位于ja

我是Java新手。。。我有了构建科学计算器的想法,在我实现了一些
actionListeners
之后,我得到了以下错误

线程“main”java.lang.StackOverflowerr中出现异常 在java.awt.Insets。(Insets.java:103) 位于sun.awt.windows.WToolkit.getScreenInsets(本机方法) 在sun.awt.windows.WToolkit.getScreenInsetts(WToolkit.java:567)上 位于java.awt.Window.init(Window.java:498) 在java.awt.Window(Window.java:536) 在java.awt.Frame.(Frame.java:420) 位于javax.swing.JFrame。(JFrame.java:224) 在GUI上。(GUI.java:29) 在actionListeners。(actionListeners.java:9) 在GUI上。(GUI.java:9) 在actionListeners。(actionListeners.java:9) 在GUI上。(GUI.java:9) 在actionListeners。(actionListeners.java:9) 在GUI上。(GUI.java:9) 在actionListeners。(actionListeners.java:9) 在GUI上。(GUI.java:9) 在actionListeners。(actionListeners.java:9)

这是密码

public GUI() {
    super("Calculator");
    setLayout(new GridLayout(5,2));

    result = new JTextArea();
    result.setEditable(false);
    add(result);
    divide.addActionListener(actionListeners);
    add(divide);
    multiply.addActionListener(actionListeners);
    add(multiply);
    substract.addActionListener(actionListeners);
    add(substract);
    sum.addActionListener(actionListeners);
    add(sum);
    for(int i=0;i<=numberButtons.length-1;i++)
 {
     numberButtons[i]= new JButton(Integer.toString(i));}

    add(numberButtons[7]);
    add(numberButtons[8]);
    add(numberButtons[9]);
    add(C);
    add(CE);
    add(numberButtons[4]);
    add(numberButtons[5]);
    add(numberButtons[6]);
    add(sqrt);
    add(cubic);
    add(numberButtons[1]);
    add(numberButtons[2]);
    add(numberButtons[3]);
    add(percentage);
    add(divideByOne);
    add(numberButtons[0]);
    add(point);
    add(square);
    add(OK);

}
public void setTextResult(String a) {
    result.setText(a);
  }
}

您尚未展示完整的代码,但似乎在
GUI
actionListeners
类之间存在循环依赖关系。每一个都需要实例化另一个,从而生成stacktrace,如图所示。只需在
GUI
中创建所需的
actionListeners
实例,而不是相反

建议:

  • 考虑在按钮之间使用共享功能

您尚未展示完整的代码,但在
GUI
actionListeners
类之间似乎存在循环依赖关系。每一个都需要实例化另一个,从而生成stacktrace,如图所示。只需在
GUI
中创建所需的
actionListeners
实例,而不是相反

建议:

  • 考虑在按钮之间使用共享功能

首先,在switch语句中使用字符串的java版本是什么。它在java 7和代码addActionListener(actionListeners)中实现您必须传递ActionListener对象的对象。检查这两个..

首先,您在switch语句中使用的字符串是什么java版本。它在java 7和代码addActionListener(ActionListener)中实现您必须传递ActionListener对象的对象。检查这两个..

您能更具体地说明错误发生的确切位置吗?当我尝试运行代码时,我已经从控制台发布了日志。PS:忘了添加Functions类,但我认为这不是问题所在。StackOverflow通常意味着您有一个不会停止的递归函数调用。显然第九条有一条…@Haneev。。。是的,我已经读到它与某种递归函数有关,但我看不出我的例子中的问题。可能的重复。您能更具体地说明错误发生在哪里吗?当我尝试运行代码时,我已经从控制台发布了日志。PS:忘了添加Functions类,但我认为这不是问题所在。StackOverflow通常意味着您有一个不会停止的递归函数调用。显然第九条有一条…@Haneev。。。是的,我读过,它与某种递归函数有关,但我看不出我的例子中的问题。可能是重复的,我理解,代码的其余部分是一堆用于数学运算的函数,我认为问题不存在。不管怎么说,我明白你说的话,但是我怎么能把我的答案写在JTextArea上呢?为此,我需要一个GUI对象到actionListeners中。我不知道如何做到这一点。阅读我理解,代码的其余部分是一组用于数学运算的函数,我认为问题不存在。不管怎么说,我明白你说的话,但是我怎么能把我的答案写在JTextArea上呢?我需要一个GUI对象到actionListeners中。我不知道怎么做。请阅读
public GUI() {
    super("Calculator");
    setLayout(new GridLayout(5,2));

    result = new JTextArea();
    result.setEditable(false);
    add(result);
    divide.addActionListener(actionListeners);
    add(divide);
    multiply.addActionListener(actionListeners);
    add(multiply);
    substract.addActionListener(actionListeners);
    add(substract);
    sum.addActionListener(actionListeners);
    add(sum);
    for(int i=0;i<=numberButtons.length-1;i++)
 {
     numberButtons[i]= new JButton(Integer.toString(i));}

    add(numberButtons[7]);
    add(numberButtons[8]);
    add(numberButtons[9]);
    add(C);
    add(CE);
    add(numberButtons[4]);
    add(numberButtons[5]);
    add(numberButtons[6]);
    add(sqrt);
    add(cubic);
    add(numberButtons[1]);
    add(numberButtons[2]);
    add(numberButtons[3]);
    add(percentage);
    add(divideByOne);
    add(numberButtons[0]);
    add(point);
    add(square);
    add(OK);

}
public void setTextResult(String a) {
    result.setText(a);
  }
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.naming.spi.DirStateFactory.Result;

public class actionListeners implements ActionListener {

Functions fn = new Functions();
GUI go = new GUI();


public void actionPerformed(ActionEvent e) {
    String x = e.getActionCommand();
    switch (x) {
    case "/":
        fn.divide(fn.getA(), fn.getB());
        go.setTextResult(Double.toString(fn.getResult()));
        break;
    case "*":
        fn.multiply(fn.getA(), fn.getB());
        break;
    case "-":
        fn.substract(fn.getA(), fn.getB());
        break;
    case "+":
        fn.sum(fn.getA(), fn.getB());
        break;
    case "+-":
        fn.divide(fn.getA(), fn.getB());
        break;
    case "C":
        go.setTextResult(" ");
        break;
    case "CE":
        go.setTextResult(" ");
        fn.setResult(0);
        break;
    case "sqrt":
        fn.sqrt(fn.getA());
        break;
    case "OK":
        go.setTextResult(Double.toString(fn.getResult()));
        break;
    case "SQRT":
        break;
    case "%":
        break;
    case "x^2":
        break;
    case "x^3":
        break;
    case "1/x":
        break;
    default:
        go.setTextResult("Eroare");
        break;
    }
}
}