使用Swing GUI在Java中使用新线程重新输入方法

时间:2016-06-23 15:07:46

标签: java multithreading swing user-interface windowbuilder

我是Eclipse中使用Swing和Window Builder进行Java多线程和GUI开发的初学者 我试图得到一个jlabel,显示程序的状态,以显示文本,并在按下按钮时快速从红色淡黑色,然后在十秒钟内消失。

我尝试使用新线程和定时任务(How to fade color from white to black?)在Stack Overflow上的几个答案中结合使用这些建议,并且第一次按下按钮时代码正常工作。但是,再次按下该按钮并再次调用该方法时,它只会短暂闪烁红色,文本会很快消失。

我认为这是因为当第二次按下按钮时,旧线程仍在运行,并且两者都试图控制标签。我显然在Stack Overflow上发现了几个关于如何在Java中杀死踏板的问题(包括How do you kill a thread in Java?),但是在我的情况下它们似乎都没有帮助。我对多线程和Swing GUI相对缺乏经验,所以我可能在代码中犯了一些非常愚蠢的错误。
这里是按下按钮时由事件监听器调用的方法(此方法位于单独的" Program Main"控制器类中):

private static void setBriefLblStatus(String content) {
    one = new Thread() {
        public void run() {
            setLblStatus(content);
            fading = Color.RED;
            TimerTask fadingTask = new TimerTask() {
                @Override
                public void run() {
                    if (fading.getRed() > 0) {
                        fading = new Color(fading.getRed() - 1, 0, 0);
                        setLblStatusColor(fading);
                    }
                }
            };
            timer = new Timer();
            timer.scheduleAtFixedRate(fadingTask, 7, 7);
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            setLblStatus("");
        }

    };
    one.start();
}

0 个答案:

没有答案