在java中运行函数时线程终止

时间:2014-03-30 02:52:27

标签: java multithreading

我正在为一个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。

0 个答案:

没有答案