gpt4 book ai didi

java - GUI 的堆栈溢出错误

转载 作者:行者123 更新时间:2023-12-02 01:11:52 25 4
gpt4 key购买 nike

好吧,我正在制作一个计算器,但出现了堆栈溢出错误,我猜是因为它正在尝试处理大量数据。

import java.awt.*;
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Size extends JPanel implements ActionListener {

double base,size;
int shoesize;
String race;

JButton calc = new JButton("Calculate");

JTextField textsize = new JTextField(20);

public Size() {
//JButton calc;
System.out.println("Started the adding");

calc.addActionListener(this);
textsize.addActionListener(this);

calc.setBounds(135, 200, 120, 40);
textsize.setBounds(15,40,70,20);

add(calc);
add(textsize);

setPreferredSize(new Dimension(400, 300));
setLayout(null);
}

public static void main(String[] args) {
JFrame frame = new JFrame("Size calc");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new Size());
frame.pack();
frame.setVisible(true);
}

@Override
public void paint(Graphics g){
DrawStats(g);
}

public void DrawStats(Graphics g) {
g.setFont(new Font(null, Font.PLAIN, 12));
g.setColor(Color.red);
g.drawString("Aprrox Size: " + size, 135, 15);
paint(g);
}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == calc) {
try {
String ShoeSize = textsize.getText();

shoesize = Integer.parseInt(ShoeSize);
size = shoesize/2;
} catch (Exception j) {
System.out.println("Nothing inside of the text field");
}
}
}
}

当我注释掉 paint(g) 时,我不再收到错误:

 Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.lang.Character.toLowerCase(Unknown Source)
at java.lang.Character.toLowerCase(Unknown Source)
at java.lang.String.toLowerCase(Unknown Source)
at sun.font.SunFontManager.findFont2D(Unknown Source)
at java.awt.Font.getFont2D(Unknown Source)
at java.awt.Font.access$000(Unknown Source)
at java.awt.Font$FontAccessImpl.getFont2D(Unknown Source)
at sun.font.FontUtilities.getFont2D(Unknown Source)
at sun.java2d.SunGraphics2D.checkFontInfo(Unknown Source)
at sun.java2d.SunGraphics2D.getFontInfo(Unknown Source)
at sun.java2d.pipe.GlyphListPipe.drawString(Unknown Source)
at sun.java2d.SunGraphics2D.drawString(Unknown Source)

我想让它实时更新“Aproox size”

最佳答案

paintDrawStats 之间存在循环依赖关系——它们相互调用。不要直接调用paint。而是调用 repaint。同时覆盖 paintComponent 而不是 paint 并调用 super.paintComponent(g)

删除方法 paintDrawStats 并替换为这个

@Override
public void paintComponent(Graphics g) {

super.paintComponent(g));
g.setFont(new Font("SansSerif", Font.PLAIN, 12));
g.setColor(Color.red);
g.drawString("Aprrox Size: " + size, 135, 15);
}

使用 Swing Timer如果需要定期重绘,则调用 repaint

旁白:在命名方法名称时使用 Java 命名约定,例如 drawStats

关于java - GUI 的堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16609709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com