我一直在使用Midi音序器進行練習,並使用ControlEventListener根據音樂的節奏進行重繪,在隨機顏色,形狀和位置的面板上重新繪製正方形。當我在筆記本上這樣做時,一切正常。但是,當我在PC上執行此操作時,出現此錯誤:使用Midi音序器時返回錯誤代碼
Aug 07, 2013 1:10:11 PM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
BUILD SUCCESSFUL (total time: 27 seconds)
該程序工作得很好。編譯並完成它應該做的事情,正如我前面所說的,我的筆記本電腦上的這個確切代碼沒有問題。
此外,這些代碼中的大部分都是從一本關於Java的書中提取出來的,我只是對面板進行了一些更改,以調整代碼以稍微不同地做同樣的事情。 有人知道這段代碼的含義嗎? 我用它搜索了一下,什麼也沒找到。這本書沒有提到這種代碼。
任何幫助將不勝感激。提前感謝您花時間閱讀本文,並隨時爲您解答此問題。
This is the code in its entirity:
import javax.swing.*;
import java.awt.*;
import javax.sound.midi.*;
public class Check implements ControllerEventListener{
JFrame frame;
DrawPanel dp;
public void controlChange(ShortMessage a) {
frame.repaint();
}
public static void main(String[] args) {
new Check().buildGui();
}
private void buildGui() {
frame = new JFrame("Woot");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dp = new DrawPanel();
frame.getContentPane().add(dp);
frame.setVisible(true);
frame.setSize(500, 500);
frame.setResizable(false);
frame.setLocation(375, 50);
playMusic();
}
private void playMusic() {
try {
Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();
int[] trackedInt = {127};
sequencer.addControllerEventListener(this, trackedInt);
Sequence seq = new Sequence(Sequence.PPQ,4);
Track track = seq.createTrack();
for(int i = 0; i < 50; i++) {
int rI = (int)(Math.random()*50)+30;
track.add(makeEvent(144,9,rI,100,i*10));
track.add(makeEvent(176,1,127,0,i*10));
track.add(makeEvent(128,9,rI,0,i*2+2));
}
sequencer.setSequence(seq);
sequencer.setTempoInBPM(160);
sequencer.start();
} catch(Exception exc){}
}
private 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 exc){}
return event;
}
}
class DrawPanel extends JPanel {
public void paintComponent(Graphics g) {
int r = (int)(Math.random()*256);
int gr = (int)(Math.random()*256);
int b = (int)(Math.random()*256);
g.setColor(new Color(r,gr,b));
int x = (int)(Math.random()*200)+20;
int y = (int)(Math.random()*200)+20;
int h = (int)(Math.random()*500)+20;
int w = (int)(Math.random()*500)+20;
g.fillRect(x, y, w, h);
}
}
可能重複的:http://stackoverflow.com/questions/16428098/groovy-shell-warning-could-not-open-create -prefs-root-node –
您可以提供您目前使用的代碼嗎? –
現在已添加完整的代碼。 –