首页 > 解决方案 > 反正有一个 for 循环在后台运行,另一个任务在前面吗?

问题描述

我有一个不断向下滚动的背景图像,但我在它上面放置了一个菜单,需要一个 keylistner 和音乐。但是我似乎无法让 keylistener 开始。我的假设是,这是由于 for 循环在到达终点之前自行重置。

//Backloop is called before keyPressed in the main class
public void keyPressed(KeyEvent VK_DOWN) {
    down();
}
public void backloop() throws InterruptedException {
    for(int x = 1; x > -4320; x--) {
        if(x == -4000)
        {
            x = 0;
            rolling.setLocation(0, x);
        }else {
            rolling.setLocation(0, x);
            Thread.sleep(50);
        }

    }
}

public void down() {
    if(title = false)
    {
        panel.remove(title1);
        panel.add(title2);
        title = true;
    }else {
        panel.remove(title2);
        panel.add(title1);
        title = false;
    }
}

我希望输出在for循环中运行背景图像,并且在按下向下箭头时标题屏幕会改变,但是它只运行背景循环

标签: javafor-loopkeylistener

解决方案


你的程序现在只有一个线程。因此,它不能同时做两件事。但是,好消息是您可以对程序进行多线程处理,以便它一次执行多项操作。

我在这里回答了一个与此类似的问题:在 Eclipse 上按“运行”时遇到问题(同时)启动游戏和音乐

您可以将背景循环放在一个类中并实现Runnable. 这将允许您在后台运行该 for 循环。上面的链接显示了如何修改代码以将您的程序从单线程移动到多线程。


推荐阅读