Легкая программа показывает в менюшке непонятный артефакт - Java

Формулировка задачи:

Здравствуйте! Ниже работающий код. Однако при исполнении программы почему то отображается "будто бы вторая строка меню".
import javax.sound.midi.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import static javax.sound.midi.Sequence.PPQ;
public class JHF_TESTS_MMP3_412 {
    static JFrame jFrame;
    static int eventsCounter=0;
 
    static MyDrawingPanel myDrawingPanel;
    static ContinuePlaying continuePlaying;
    static StopPlaying stopPlaying;
    Sequencer sequencer;
 
 
    public static void main(String[] args) throws Exception {
 
        JHF_TESTS_MMP3_412 jhf_tests_mmp3_412 = new JHF_TESTS_MMP3_412();
        jhf_tests_mmp3_412.GStart();
    }
    public void setGUI() {
        myDrawingPanel = new MyDrawingPanel();
        continuePlaying = new ContinuePlaying();
        stopPlaying = new StopPlaying();
 
        jFrame = new JFrame("MMP3");
 
        JMenuBar MP3menuBar = new JMenuBar();
        JMenu MP3menu = new JMenu("Player");
        JMenuItem Play = new JMenuItem("Play");
        JMenuItem Stop = new JMenuItem("Pause");
 
        Play.addActionListener(continuePlaying);
        Stop.addActionListener(stopPlaying);
 
        MP3menu.add(Play);
        MP3menu.add(Stop);
 
        MP3menuBar.add(MP3menu);
 
        jFrame.setJMenuBar(MP3menuBar);
 
        jFrame.getContentPane().add(BorderLayout.CENTER,myDrawingPanel);
        jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
        jFrame.setSize(1920, 1080);
        jFrame.setVisible(true);
    }
 
 
    public void GStart() throws Exception{
        setGUI();
        sequencer = MidiSystem.getSequencer();
        sequencer.open();
        int[] arraytt = {127};
        sequencer.addControllerEventListener(myDrawingPanel,arraytt);
        Sequence sequence = new Sequence(PPQ,4);
        Track track = sequence.createTrack(); //Track track = new Sequence(PPQ,4).createTrack();
        for (long i = 1; i < 6500; i+=4) {
            track.add(newSingleMidiEvent(192,1,18,0,1));
            track.add(newSingleMidiEvent(144, 1, NotesrandomNumber(), 100, i));
            track.add(newSingleMidiEvent(176, 1, 127, 0, i));
            track.add(newSingleMidiEvent(128, 1, NotesrandomNumber(), 100, i + 2));
        }
        sequencer.setSequence(sequence);
        sequencer.setTempoInBPM(333);
        sequencer.start();
 
 
        Thread.sleep(100);
        System.out.println("eventsCounter: " + eventsCounter + "; arraytt: " + arraytt[0]);
 
    }
    public MidiEvent newSingleMidiEvent(int mv1, int mv2, int mv3, int mv4, long mv5) throws Exception {
        MidiEvent midiEvent = new MidiEvent(new ShortMessage(mv1, mv2, mv3, mv4), mv5);
        return midiEvent;
    }
    public int NotesrandomNumber() {
        int intrandom = (int) (Math.random()*65);
        return intrandom;
    }
    class MyDrawingPanel extends JPanel implements ControllerEventListener {
        boolean EventTestMark;
 
        public void controlChange(ShortMessage event){
            EventTestMark = true;
            myDrawingPanel.repaint();
        }
        public int dotsRandomNumberX() {
            int intrandomXandX = (int) (Math.random()*1820);
            return intrandomXandX;
        }
        public int dotsRandomNumberY() {
 
            int intrandomXandY = (int) (Math.random()*980);
            return intrandomXandY;
        }
        public Color colorsRandom() {
            int red = (int) (Math.random()*255);
            int green = (int) (Math.random()*255);
            int blue = (int) (Math.random()*255);
            Color randomColor = new Color(red,green,blue);
            return randomColor;
        }
        public void paint(Graphics g){
            if(EventTestMark==true) {
                eventsCounter++;
                g.setColor(colorsRandom());
                g.fillRect(dotsRandomNumberX(), dotsRandomNumberY(), 23+dotsRandomNumberX()/14, 23+ dotsRandomNumberY()/14);
                EventTestMark = false;
            }
        }
    }
    public class StopPlaying implements ActionListener{
        public void actionPerformed(ActionEvent actionEvent){
            sequencer.stop();
        }
    }
    public class ContinuePlaying implements ActionListener{
        public void actionPerformed(ActionEvent actionEvent){
            sequencer.start();
            sequencer.setTempoInBPM(333);
        }
    }
 
}
Фото приложено

Код к задаче: «Легкая программа показывает в менюшке непонятный артефакт - Java»

textual
import javax.sound.midi.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.util.List;
 
import static javax.sound.midi.Sequence.PPQ;
 
public class untitled {
    static JFrame jFrame;
    static int eventsCounter = 0;
    static MyDrawingPanel myDrawingPanel;
    static ContinuePlaying continuePlaying;
    static StopPlaying stopPlaying;
    Sequencer sequencer;
    public static void main(String[] args) throws Exception {
        untitled untitled = new untitled();
        untitled.GStart();
    }
    public void setGUI() {
        myDrawingPanel = new MyDrawingPanel();
        continuePlaying = new ContinuePlaying();
        stopPlaying = new StopPlaying();
        jFrame = new JFrame("MMP3");
        JMenuBar MP3menuBar = new JMenuBar();
        JMenu MP3menu = new JMenu("Player");
        JMenuItem Play = new JMenuItem("Play");
        JMenuItem Stop = new JMenuItem("Pause");
        Play.addActionListener(continuePlaying);
        Stop.addActionListener(stopPlaying);
        MP3menu.add(Play);
        MP3menu.add(Stop);
        MP3menuBar.add(MP3menu);
        jFrame.setJMenuBar(MP3menuBar);
        jFrame.getContentPane().add(BorderLayout.CENTER, myDrawingPanel);
        jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
        jFrame.setSize(1920, 1080);
        jFrame.setVisible(true);
    }
    public void GStart() throws Exception {
        setGUI();
        sequencer = MidiSystem.getSequencer();
        sequencer.open();
        int[] arraytt = {127};
        sequencer.addControllerEventListener(myDrawingPanel, arraytt);
        Sequence sequence = new Sequence(PPQ, 4);
        Track track = sequence.createTrack(); //Track track = new Sequence(PPQ,4).createTrack();
        for (long i = 1; i < 6500; i += 4) {
            track.add(newSingleMidiEvent(192, 1, 18, 0, 1));
            track.add(newSingleMidiEvent(144, 1, NotesrandomNumber(), 100, i));
            track.add(newSingleMidiEvent(176, 1, 127, 0, i));
            track.add(newSingleMidiEvent(128, 1, NotesrandomNumber(), 100, i + 2));
        }
        sequencer.setSequence(sequence);
        sequencer.setTempoInBPM(333);
        sequencer.start();
        Thread.sleep(100);
        System.out.println("eventsCounter: " + eventsCounter + "; arraytt: " + arraytt[0]);
    }
    public MidiEvent newSingleMidiEvent(int mv1, int mv2, int mv3, int mv4, long mv5) throws Exception {
        MidiEvent midiEvent = new MidiEvent(new ShortMessage(mv1, mv2, mv3, mv4), mv5);
        return midiEvent;
    }
    public int NotesrandomNumber() {
        int intrandom = (int) (Math.random() * 65);
        return intrandom;
    }
    class MyRect {
        Rectangle rect;
        Color color;
    }
    class MyDrawingPanel extends JPanel implements ControllerEventListener {
        boolean EventTestMark;
        Random rnd = new Random();
        List arrayList = new ArrayList();
        int index;
        public void controlChange(ShortMessage event) {
            EventTestMark = true;
            myDrawingPanel.repaint();
        }
        public int dotsRandomNumberX() {
            int intrandomXandX = (int) (Math.random() * 1820);
            return intrandomXandX;
        }
        public int dotsRandomNumberY() {
            int intrandomXandY = (int) (Math.random() * 980);
            return intrandomXandY;
        }
        public Color colorsRandom() {
            int red = (int) (Math.random() * 255);
            int green = (int) (Math.random() * 255);
            int blue = (int) (Math.random() * 255);
            Color randomColor = new Color(red, green, blue);
            return randomColor;
        }
        public void paint(Graphics g) {
            super.paint(g);
            if (EventTestMark == true) {
                System.out.println(eventsCounter++);
                List arrayListInternal = new ArrayList();
                arrayListInternal.add(dotsRandomNumberX());
                arrayListInternal.add(dotsRandomNumberY());
                arrayListInternal.add(colorsRandom());
                arrayListInternal.add((int)(Math.random() * 1820/14)+23); // width
                arrayListInternal.add((int)(Math.random() * 980/14)+23); // height
                arrayList.add(arrayListInternal);
                ListIterator iterator = arrayList.listIterator();
                while (iterator.hasNext()) {
                    ArrayList arrayListTemp = (ArrayList) iterator.next();
                    g.setColor((Color) arrayListTemp.get(2));
                    g.fillRect((int) arrayListTemp.get(0), (int) arrayListTemp.get(1), (int) arrayListTemp.get(3),  (int) arrayListTemp.get(4));
                    System.out.println(arrayListTemp);
                }
            }
            EventTestMark = false;
        }
    }
    public class StopPlaying implements ActionListener {
        public void actionPerformed(ActionEvent actionEvent) {
            sequencer.stop();
        }
    }
    public class ContinuePlaying implements ActionListener {
        public void actionPerformed(ActionEvent actionEvent) {
            sequencer.start();
            sequencer.setTempoInBPM(333);
        }
    }
}

11   голосов, оценка 3.818 из 5


СОХРАНИТЬ ССЫЛКУ