Ошибка java.awt.AWTEventMulticaster.mouseEntered
Формулировка задачи:
Добрый день! Подскажите плиз начинающему программисту. Начал писать программку и столкнулся с необъяснимым для себя.
Очень часто (не всегда) возникают ошибки:
java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:299)
at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:299)
at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:299)
at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:299)
...
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:279)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:279)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:279)
...
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:279)
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
Причем ссылок на номер строки в моей проге нет
Когда я открываю на коды ошибок в консоли IntelliJ IDEA открывается -
public class AWTEventMulticaster implements
и ссылка на метод в этом классе, например public void mouseReleased(MouseEvent e) { * ((MouseListener)a).mouseReleased(e); ((MouseListener)b).mouseReleased(e); } голову уже сломал, что делать и что не так
мой фрейм
package com.zerg.Shitalochka; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.font.FontRenderContext; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; import java.io.File; import java.io.IOException; public class MyFrame extends JFrame { private Image imageYear; private Image imageMonth; private int monthInt = 0; // номер выбранного месяца private int dayNumberInt = 0; // номер выбранного дня private int yearInt = 0; // номер выбранного года private int firstDay = 0; // начальная позиция заполнения дней private int endDay = 0; // конечная позиция заполнения дней private Object monthArrayObject; // массив для помещения всех данных одного месяца private int monthArrayInt [] []; private int mouseClickedX = 0; private int mouseClickedY = 0; private int mousePressedX = 0; private int mousePressedY = 0; private int dayWeek = 0; public boolean closeFrameDayBoolean; final String monthString1 = "Январь"; final String monthString2 = "Февраль"; final String monthString3 = "Март"; final String monthString4 = "Апрель"; final String monthString5 = "Май"; final String monthString6 = "Июнь"; final String monthString7 = "Июль"; final String monthString8 = "Август"; final String monthString9 = "Сентябрь"; final String monthString10 = "Октябрь"; final String monthString11 = "Ноябрь"; final String monthString12 = "Декабрь"; final String [] monthArray = new String[12]; public final String [] dayOfWeekArray = new String[7]; Rectangle2D [] arrayRectangle = new Rectangle2D[13]; // 12 рамок месяцев и 1 рамка выделения RoundRectangle2D rectButton = null; // кнопка в меню месяца Rectangle2D [] arrayRectangleDay = new Rectangle2D[43]; // 43 рамки для всех дней boolean newImageBooleanYear = false; // прорисовка меню года boolean newImageBooleanMonth = false; // прорисовка меню месяца boolean newImageBooleanDay = false; // прорисовка меню дня boolean selectionMonth = false; // прорисовка выделения месяца boolean selectionRectButton = false; // выбрана кнопка назад или нет boolean createFrameDay = true; // если фрейм дня еще не создан private int xRec13 = 0; //координаты выделения в меню год private int yRec13 = 0; private int hRec13 = 0; private int wRec13 = 0; private int xRecDay = 0; // координаты выделения в меню месяц private int yRecDay = 0; private int hRecDay = 0; private int wRecDay = 0; Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); int heightScreen = screenSize.height; int widthScreen = screenSize.width; int heightFrame = heightScreen*3/4; int widthFrame = widthScreen*3/4; private String textUpString = ""; //private String textDownString = ""; private String fonString = "fon.png"; private String menuYearString = "12.jpg"; private String menuMontString = "month.gif"; private JLabel textUp; private JTextField textDown;
Решение задачи: «Ошибка java.awt.AWTEventMulticaster.mouseEntered»
textual
Листинг программы
arrayRectangleDay [0] = rectMonth11; arrayRectangleDay [1] = rectMonth12; arrayRectangleDay [2] = rectMonth13; arrayRectangleDay [3] = rectMonth14; arrayRectangleDay [4] = rectMonth15; arrayRectangleDay [5] = rectMonth16; arrayRectangleDay [6] = rectMonth17; arrayRectangleDay [7] = rectMonth21; arrayRectangleDay [8] = rectMonth22; arrayRectangleDay [9] = rectMonth23; arrayRectangleDay [10] = rectMonth24; arrayRectangleDay [11] = rectMonth25; arrayRectangleDay [12] = rectMonth26; arrayRectangleDay [13] = rectMonth27; arrayRectangleDay [14] = rectMonth31; arrayRectangleDay [15] = rectMonth32; arrayRectangleDay [16] = rectMonth33; arrayRectangleDay [17] = rectMonth34; arrayRectangleDay [18] = rectMonth35; arrayRectangleDay [19] = rectMonth36; arrayRectangleDay [20] = rectMonth37; arrayRectangleDay [21] = rectMonth41; arrayRectangleDay [22] = rectMonth42; arrayRectangleDay [23] = rectMonth43; arrayRectangleDay [24] = rectMonth44; arrayRectangleDay [25] = rectMonth45; arrayRectangleDay [26] = rectMonth46; arrayRectangleDay [27] = rectMonth47; arrayRectangleDay [28] = rectMonth51; arrayRectangleDay [29] = rectMonth52; arrayRectangleDay [30] = rectMonth53; arrayRectangleDay [31] = rectMonth54; arrayRectangleDay [32] = rectMonth55; arrayRectangleDay [33] = rectMonth56; arrayRectangleDay [34] = rectMonth57; arrayRectangleDay [35] = rectMonth61; arrayRectangleDay [36] = rectMonth62; arrayRectangleDay [37] = rectMonth63; arrayRectangleDay [38] = rectMonth64; arrayRectangleDay [39] = rectMonth65; arrayRectangleDay [40] = rectMonth66; arrayRectangleDay [41] = rectMonth67; if (selectionMonth) { // выбор дня Rectangle2D rectMonth = new Rectangle2D.Double(xRecDay, yRecDay, wRecDay, hRecDay); graphics2D.setColor(new Color(60, 255, 8)); graphics2D.fill(rectMonth); } if (selectionRectButton) { // кнопка "назад" graphics.setColor(new Color(59, 255, 6)); } else graphics.setColor(Color.WHITE); rectButton = new RoundRectangle2D.Double(x+w*6,y*2/5,w,h,10,10); graphics2D.fill(rectButton); dayOfWeekArray [0] = "понедельник"; dayOfWeekArray [1] = "вторник"; dayOfWeekArray [2] = "среда"; dayOfWeekArray [3] = "четверг"; dayOfWeekArray [4] = "пятница"; dayOfWeekArray [5] = "суббота"; dayOfWeekArray [6] = "воскресенье"; graphics.setColor(new Color(2, 0, 185)); font = new Font ("SansSerif",Font.BOLD,(getWidth()/60)); graphics.setFont(font); graphics.drawString(dayOfWeekArray[0], x + 3, y + h * 3 / 5); graphics.drawString(dayOfWeekArray[1], x + 3, (y + h * 3 / 5) + h); graphics.drawString(dayOfWeekArray [2],x+3,(y+h*3/5)+h*2); graphics.drawString(dayOfWeekArray[3], x + 3, (y + h * 3 / 5) + h * 3); graphics.drawString(dayOfWeekArray [4],x+3,(y+h*3/5)+h*4); graphics.setColor(new Color(158, 3, 2)); graphics.drawString(dayOfWeekArray[5], x + 3, (y + h * 3 / 5) + h * 5); graphics.drawString(dayOfWeekArray [6],x+3,(y + h * 3 / 5) + h * 6); graphics.setColor(new Color(1, 106, 53)); font = new Font ("SansSerif",Font.BOLD,(getWidth()/40)); graphics.setFont(font); graphics.drawString("назад",(x+w*7)-w*31/40,y*5/7); monthArrayObject = Year.getIntMenuMonth(monthInt); // получение данных monthArrayInt = (int[][]) monthArrayObject; // приведение к int int monthSize = monthArrayInt [0] [0] /10; // колличество дней в месяце dayWeek = monthArrayInt [0] [0] - ((monthSize)*10); // день недели 1-го числа месяца int dayNumber = 1; // счетчик дней для цикла boolean runInt = false; // флажок начала отчета // прорисовка дней и чисел в клеточках for (int iStr = 1; iStr <= 6; iStr ++){ for ( int iWeek = 0; iWeek < 7; iWeek ++){ if (dayNumber <= monthSize){ if (iWeek == (dayWeek-1) || runInt){ runInt = true; graphics.setFont(new Font ("SansSerif",Font.BOLD,(getWidth()/25))); if (iWeek > 4) graphics.setColor(new Color(156,10,10)); else graphics.setColor(new Color(1, 106, 53)); graphics.drawString(String.valueOf(dayNumber),(x + w/3)+w*iStr, (y + h * 3 / 5) + h * iWeek); graphics.setColor(Color.BLACK); graphics.setFont(new Font ("SansSerif",Font.ITALIC,(getWidth()/60))); graphics.drawString(String.valueOf((monthArrayInt [0] [1])+"/"+(monthArrayInt [0] [2])),(x + w/10)+w*iStr, (y + h * 30 / 32) + h * iWeek); dayNumber++; } } } } // выбор дня Point2D pointMonth1 = new Point2D.Double(mousePressedX,mousePressedY); // создается точка с координатами нажатия ЛКМ Point2D pointMonth2 = new Point2D.Double(mouseClickedX,mouseClickedY); // создается точка с координатами отпускания ЛКМ firstDay = dayWeek; endDay = monthSize + dayWeek - 1; for (int i = 0; i < 42; i++) { // создается выделение выбранного месяца if (arrayRectangleDay[i].contains(pointMonth1)) { if ((i+1) >= firstDay && (i+1) <= endDay) { xRecDay = (int) arrayRectangleDay[i].getX(); yRecDay = (int) arrayRectangleDay[i].getY(); hRecDay = (int) arrayRectangleDay[i].getHeight(); wRecDay = (int) arrayRectangleDay[i].getWidth(); selectionMonth = true; dayNumberInt = i - firstDay + 2; // записывается номер дня // repaint(); } } } for (int i = 0; i < 42; i++) { //отпускание кнопки на выбранном дне if (arrayRectangleDay[i].contains(pointMonth2)) { if ((i+1) >= firstDay && (i+1) <= endDay) { newImageBooleanDay = true; createFrameDay = true; //repaint(); } } } if (rectButton.contains (pointMonth1)){ // нажатие кнопки "назад" selectionRectButton = true; } else selectionRectButton = false; if (rectButton.contains(pointMonth2)) { // отпускание кнопки назад newImageBooleanMonth = false; newImageBooleanYear = true; mouseClickedX = 0; mouseClickedY = 0; mousePressedX = 0; mousePressedY = 0; repaint(); } } if (newImageBooleanDay){ // если выбран меню день setDownText("Введите данные!"); if (createFrameDay) { //System.out.println("день создан ");// убрать //Shitalochka.createFrameDay (yearInt, monthInt, dayNumberInt ); createFrameDay = false; } } if (closeFrameDayBoolean) { // пересмотреть и удалить лишнее !!!!!!!!!!!!!!!!!!!!! // удаление окна frameDay Shitalochka.frameDay.button1.removeAll(); Shitalochka.frameDay.setVisible(false); Shitalochka.frameDay.dispose(); newImageBooleanDay = false; newImageBooleanMonth = true; //setEnabled(true); //setFocusable(true); closeFrameDayBoolean = false; Shitalochka.frameDay = null; repaint(); } } public MyPanel (){ try { File fonFile = new File(fonString); imageFon = ImageIO.read(fonFile); } catch (IOException e) { e.printStackTrace(); } try { File menuImageYear = new File(menuYearString); imageYear = ImageIO.read(menuImageYear); } catch (IOException e) { e.printStackTrace(); } try { File menuImageMonth = new File(menuMontString); imageMonth = ImageIO.read(menuImageMonth); } catch (IOException e) { e.printStackTrace(); } } } public MyFrame (String t){ this.textUpString = t; setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//потом это убрать setSize(widthFrame,heightFrame); int yFrame = (heightScreen - heightFrame)/2; int xFrame = (widthScreen - widthFrame)/2; setLocation(xFrame, yFrame); Image iconFrame = Toolkit.getDefaultToolkit().getImage("logo.png"); setIconImage(iconFrame); setTitle("Считалочка"); textUp = new JLabel ("", new ImageIcon("Z.gif"), SwingConstants.CENTER); textUp.setFont(new Font("SansSerif", Font.BOLD, 26)); textUp.setForeground(Color.blue); textDown = new JTextField ("",widthFrame); textDown.setEditable(false); textDown.setFont(new Font("SansSerif", Font.BOLD, 20)); textDown.setForeground(Color.red); textUp.setText (textUpString); MyPanel panel = new MyPanel(); Container container = getContentPane(); BorderLayout layout = new BorderLayout(1,0); container.add(panel, layout.CENTER); container.add(textUp, layout.NORTH); container.add(textDown, layout.SOUTH); setVisible(true); } public void setUpText (String text){ // изменяет текст в верхней панели textUp.setText (text); repaint(); } public void setDownText (String text){ // изменяет текст в нижней панели textDown.setText (text); repaint(); } public void setImage (String text){ // загружает картинку меню в фрейм if (text.equals("menuYear")){ newImageBooleanYear = true; repaint(); } } public String getMonth (int a) { // возвращает название месяца по номеру String r = monthArray [a]; return r; } public String getStringWeek (int a) { // возвращает название дня недели по номеру String r = dayOfWeekArray [a]; return r; } public int [] getData () { int [] array = new int[3]; array [0] = dayNumberInt; // номер выбранного месяца array [1] = monthInt; // номер выбранного дня array [2] = yearInt; // номер выбранного года return array; } /* public void closeFrameDay (){ Shitalochka.frameDay.setVisible(false); Shitalochka.frameDay.dispose(); newImageBooleanDay = false; newImageBooleanMonth = true; repaint(); } */ private class MyMouse implements MouseListener { @Override public void mouseClicked(MouseEvent e) { if (!e.isAltDown() && !e.isMetaDown()) { mouseClickedX = e.getX(); mouseClickedY = e.getY(); //System.out.println(mouseClickedX + " " + mouseClickedY); } } @Override public void mousePressed(MouseEvent e) { if (!e.isAltDown() && !e.isMetaDown()) { mousePressedX = e.getX(); mousePressedY = e.getY(); } } @Override public void mouseReleased(MouseEvent e) { mouseClickedX = 0; mouseClickedY = 0; mousePressedX = 0; mousePressedY = 0; } @Override public void mouseEntered(MouseEvent e) { mouseClickedX = 0; mouseClickedY = 0; mousePressedX = 0; mousePressedY = 0; repaint(); } @Override public void mouseExited(MouseEvent e) { mouseClickedX = 0; mouseClickedY = 0; mousePressedX = 0; mousePressedY = 0; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д