我正在为一个midi制作者编程,你可以通过控制台(后来的窗口)制作一首歌,但我遇到了一个线程问题。当我想要开始播放歌曲时,线程会启动,但它不会运行具有歌曲播放器的功能。我从一个工作项目中复制并粘贴了基本代码,但我无法弄清楚它为什么没有运行。 IT打印“设置”但不打印“正在运行”。这是我的函数代码:
public void songStart() throws InterruptedException {
int temp;
channelVolume = new int[channelNotes.length][channelNotes[0].length];
if (channelNotes.length < userChannels.length) {
temp = channelNotes.length;
} else {
temp = userChannels.length;
}
for (int j = 0; j < userChannelNotesNumLongest; j++) {
for (int i = 0; i < temp; i++) {
if (channelNotes[i][j] == r) {
channelVolume[i][j] = 0;
} else if (advanced == false){
channelVolume[i][j]=50;
}
}
}
System.out.println("running");
for (int i = 0; i < temp; i++) {
for (int j = 0; j < userChannelNotesNumLongest; j++) {
noteOn(userChannels[i],channelNotes[i][j],channelVolume[i][j]);
Thread.sleep(interval);
noteOff(userChannels[i],channelNotes[i][j]);
}
}
}
这是线程的代码:
public class SongThread extends Thread {
public void run(){
try {
Main.song.songStart();
} catch (InterruptedException e) { }
}
}
这是代码运行线程(我在那里打印打印)
if (userInput.equals("start")) {
System.out.println("setting up");
SongThread thread = new SongThread();
thread.start();
}
注意:一切正常,直到线程尝试运行该函数,然后它才停止运行它。此外,它是在其他项目中相同的基本代码工作正常。显示的函数位于Main
中名为song
的类实例中。而且我没有从捕获中得到错误。请记住,我从一个正在运行的项目中复制并粘贴了代码,唯一不同的是它不是静态的并且从Main
类
我尝试将songStart
函数设置为静态内部的所有内容。我已经使用了try / catch和d的所有组合在线程和函数中抛出异常(其中线程没有try / catch或throws,并且函数有try / catch或throws)。我在我的工作项目中拥有它的方式是函数中的抛出和线程中的try / catch。