Ошибка 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;
}
}
}