“线程中的异常”;“主要”;java.lang.StackOverflowerError actionListeners
我是Java新手。。。我有了构建科学计算器的想法,在我实现了一些“线程中的异常”;“主要”;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
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
实例,而不是相反
建议:
- 考虑在按钮之间使用共享功能
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;
}
}
}