私は Midi Sequencer で遊んでいて、ControlEventListener を使用して音楽のビートに基づいてランダムな色、形、および場所でパネル上の四角形を再描画する演習を行っています。ラップトップでこれを行うと、すべて正常に動作します。ただし、PC でこれを行うと、次のエラーが発生します。
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);
}
}