为了账号安全,请及时绑定邮箱和手机立即绑定

求哪里错了

求哪里错了

慕粉3355806 2016-06-07 22:52:55
import java.awt.*;import javax.swing.*;import javax.sound.midi.*;import java.util.*;import java.awt.event.*;public class BeatBox { JPanel mainPanel; ArrayList<JCheckBox> checkboxList; Sequencer sequencer; Sequence sequence; Track track; JFrame theFrame; String[] instrumentNames = {"Bass Drum","Closed Hi-Hat", "Open Hi-Hat","Acoustic Snare","Crash Cymbal","Hand Clap", "Cowbell","Vibraslap","Low-mid Tom","High Agogo","Open Hi Conga"}; int[] instruments = {35,42,46,38,49,39,50,60,70,72,64,56,58,47,67,63}; public static void main(String[] args) { BeatBox GUI = new BeatBox(); GUI.buildGUI(); } public void buildGUI() { theFrame = new JFrame("Cyber BeatBox"); theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); BorderLayout layout = new BorderLayout(); JPanel background = new JPanel(layout); background.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); checkboxList = new ArrayList<JCheckBox>(); Box buttonBox = new Box(BoxLayout.Y_AXIS); JButton start = new JButton("start"); start.addActionListener(new MyStartListener()); buttonBox.add(start); JButton stop = new JButton("stop"); stop.addActionListener(new MyStopListener()); buttonBox.add(stop); JButton upTempo = new JButton("Tempo Up"); upTempo.addActionListener(new MyUpTempoListener()); buttonBox.add(upTempo); JButton downTempo = new JButton("Tempo Down"); downTempo.addActionListener(new MyDownTempoListener()); buttonBox.add(downTempo); Box nameBox = new Box(BoxLayout.Y_AXIS); for (int i = 0; i < 16; i++) { nameBox.add(new Label(instrumentNames[i])); } background.add(BorderLayout.EAST, buttonBox); background.add(BorderLayout.WEST, nameBox); theFrame.getContentPane().add(background); GridLayout grid = new GridLayout(16,16); grid.setVgap(1); grid.setHgap(2); mainPanel = new JPanel(grid); background.add(BorderLayout.CENTER, mainPanel); for(int i = 0; i < 256; i++) { JCheckBox c = new JCheckBox(); c.setSelected(false); checkboxList.add(c); mainPanel.add(c); }//end for setUpMidi(); theFrame.setBounds(50, 50, 300, 300); theFrame.pack(); theFrame.setVisible(true); } public void setUpMidi() { try { sequencer = MidiSystem.getSequencer(); sequencer.open(); sequence = new Sequence(Sequence.PPQ, 4); track = sequence.createTrack(); sequencer.setTempoInBPM(120); } catch (Exception e) {e.printStackTrace();} } //close method public void buildTrackAndStart() { int[] trackList = null; sequence.deleteTrack(track); track = sequence.createTrack(); for(int i = 0; i < 16; i++) { trackList = new int[16]; int key = instruments[i]; for(int j = 0; j < 16; j++) { JCheckBox jc = (JCheckBox)checkboxList.get(j+(16*i)); if ( jc.isSelected()) { trackList[j] = key; } else { trackList[j] = 0; } } //close inner for makeTracks(trackList); track.add(makeEvent(176,1,127,0,16)); }//close for track.add(makeEvent(192,9,1,0,15)); try { sequencer.setSequence(sequence); sequencer.setLoopCount(Sequencer.LOOP_CONTINUOUSLY); sequencer.start(); sequencer.setTempoInBPM(120); } catch (Exception e) {e.printStackTrace();} }  //close buildTrackAndStart method public class MyStartListener implements ActionListener { public void actionPerformed(ActionEvent a) { buildTrackAndStart(); } }// close inner class public class MyStopListener implements ActionListener { public void actionPerformed(ActionEvent a) { sequencer.stop(); } }// close inner class public class MyUpTempoListener implements ActionListener { public void actionPerformed(ActionEvent a) { float tempoFactor = sequencer.getTempoFactor();  sequencer.setTempoFactor((float)(tempoFactor*1.03)); } }// close inner class public class MyDownTempoListener implements ActionListener { public void actionPerformed(ActionEvent a) { float tempoFactor = sequencer.getTempoFactor(); sequencer.setTempoFactor((float)(tempoFactor*0.97)); } }// close inner class public void makeTracks(int[] list) { for (int i = 0; i < 16; i++) { int key = list[i]; if (key != 0) { track.add(makeEvent(144,9,key,100,i)); track.add(makeEvent(128,9,key,100,i+2)); }//end if }// end for } //end method public MidiEvent makeEvent(int comd,int chan,int one, int two,int tick) { MidiEvent event = null; try { ShortMessage a = new ShortMessage(); a.setMessage(comd, chan, one, two); event = new MidiEvent(a,tick); } catch(Exception e) {e.printStackTrace();} return event; }}
查看完整描述

1 回答

?
一寸灰_0002

TA贡献2条经验 获得超2个赞

48行的for循环不要写死成16,用你想要使用的数组长度,不然数组长度不够就越界了,还有代码注意缩进,不然可读性太差

查看完整回答
反对 回复 2016-06-15
  • 1 回答
  • 0 关注
  • 1503 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信