Java 使用Midi Sequencer时返回的错误代码

Java 使用Midi Sequencer时返回的错误代码,java,midi,Java,Midi,我一直在玩Midi音序器,并做了一个练习,涉及使用ControlEventListener根据音乐节拍在面板上以随机颜色、形状和位置重新绘制正方形。当我在笔记本电脑上这样做时,一切都很好。但是,当我在电脑上执行此操作时,会出现以下错误: Aug 07, 2013 1:10:11 PM java.util.prefs.WindowsPreferences <init> WARNING: Could not open/create prefs root node Software\Jav

我一直在玩Midi音序器,并做了一个练习,涉及使用ControlEventListener根据音乐节拍在面板上以随机颜色、形状和位置重新绘制正方形。当我在笔记本电脑上这样做时,一切都很好。但是,当我在电脑上执行此操作时,会出现以下错误:

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)
2013年8月7日下午1:10:11 java.util.prefs.WindowsPreferences
警告:无法在根0x8000002处打开/创建prefs根节点Software\JavaSoft\prefs。Windows RegCreateKeyEx(…)返回错误代码5。
构建成功(总时间:27秒)
这个程序运行得很好。编译并执行它应该做的事情,正如我前面所说的,我在笔记本电脑上使用这段代码没有任何问题。
另外,这段代码的大部分内容都是从一本关于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);
    }
}
这是完整的代码:
导入javax.swing.*;
导入java.awt.*;
导入javax.sound.midi.*;
公共类检查实现ControllerEventListener{
JFrame框架;
拉丝板dp;
公共无效控制更改(短消息a){
frame.repaint();
}
公共静态void main(字符串[]args){
新建检查().buildGui();
}
私有void buildGui(){
框架=新的JFrame(“Woot”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dp=新的DrawPanel();
frame.getContentPane().add(dp);
frame.setVisible(true);
框架。设置尺寸(500500);
frame.setresizeable(false);
帧设置位置(375,50);
播放音乐();
}
私人音乐{
试一试{
Sequencer Sequencer=MidiSystem.getSequencer();
sequencer.open();
int[]trackedInt={127};
sequencer.addControllerEventListener(此为trackedInt);
Sequence seq=新序列(Sequence.PPQ,4);
Track Track=seq.createTrack();
对于(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(1761127,0,i*10));
track.add(makeEvent(128,9,rI,0,i*2+2));
}
序列器。设置序列(seq);
sequencer.setTempoInBPM(160);
sequencer.start();
}捕获(异常exc){}
}
私有MidiEvent makeEvent(int-comd、int-chan、int-one、int-two、int-tick){
MidiEvent=null;
试一试{
短消息a=新短消息();
a、 设置消息(comd、chan、一、二);
事件=新事件(a,勾号);
}捕获(异常exc){}
返回事件;
}
}
类DrawPanel扩展了JPanel{
公共组件(图形g){
int r=(int)(Math.random()*256);
int gr=(int)(Math.random()*256);
intb=(int)(Math.random()*256);
g、 setColor(新颜色(r、gr、b));
intx=(int)(Math.random()*200)+20;
int y=(int)(Math.random()*200)+20;
inth=(int)(Math.random()*500)+20;
intw=(int)(Math.random()*500)+20;
g、 fillRect(x,y,w,h);
}
}

关闭警告日志即可:

PlatformLogger.getLogger("java.util.prefs")
        .setLevel(PlatformLogger.Level.SEVERE);

只需关闭警告日志:

PlatformLogger.getLogger("java.util.prefs")
        .setLevel(PlatformLogger.Level.SEVERE);

可能的重复:您能提供您目前使用的代码吗?现在已添加整个代码。可能的重复:您能提供您目前使用的代码吗?现在已添加整个代码。我知道这样做是可能的,但这只是防止日志显示错误。它无法纠正它。评论中提供的链接实际上解决了这个问题。感谢您的评论,我浏览了给定问题的Java源代码,看起来导致此错误的实例对于midi播放是不需要的,可能是Java平台中糟糕代码设计的古老遗物。因为这没有害处,我建议取消这个警告。如果它是你的代码,我会给你一些其他的建议。您当前的“修复程序”必须由应用程序的每个用户应用,并且只能在其计算机上具有管理员权限的情况下应用。我理解这样做是可能的,但这只是防止日志显示错误。它无法纠正它。评论中提供的链接实际上解决了这个问题。感谢您的评论,我浏览了给定问题的Java源代码,看起来导致此错误的实例对于midi播放是不需要的,可能是Java平台中糟糕代码设计的古老遗物。因为这没有害处,我建议取消这个警告。如果它是你的代码,我会给你一些其他的建议。您当前的“修复”必须由应用程序的每个用户应用,并且只能在其计算机上使用管理员权限应用。