【问题标题】:SwingWorker problemsSwingWorker 问题
【发布时间】:2012-12-24 10:43:32
【问题描述】:

我正在尝试使用 Java 中的 GUI 制作基于文本的游戏,我需要使用 SwingWorker。但是我不理解任何教程,这对我来说没有意义:(。

public void write(String msg){
    int i=0;
    while(true){
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        console.setText(console.getText()+ msg.charAt(i));
        if(i==msg.length()){
            console.setText(console.getText()+ newline);
            break;
        }
    }
}

基本上,我要做的是将字符串传递给方法并逐个字符地打印出来,但是我不能,因为 sleep() 会中断 EDT 并将 GUI 锁定为 msg.length()*400ms : (。

如果有人有使用 SwingWorker 的代码解决方案,我将不胜感激 :)

【问题讨论】:

  • 为什么要在“基于文本的游戏”中使用swingworker? Swingworkers 旨在与 Swing 一起使用...
  • 基于文本的游戏仍然有一个 GUI
  • while(true){ 是无限循环,我在那里看到break;,但最好将true 更改为局部变量,以获得更好的帮助,尽快发布SSCCE,简短,可运行,可编译,大约在上午问题,JFrameJTextAreaSwingWorker 的值来自 Random,在这个论坛上的代码(以 SSCCE 形式)大约 35 - 50 行关于同一问题
  • 您在使用上述代码时遇到了什么问题?从SwingWorkerdoInBackground() 调用这个方法你发现了什么问题
  • 问题是我不知道如何使用 swingworker 执行此操作。如果没有 swingworker,它只会将 gui 锁定为 msg.length()*400ms

标签: java multithreading user-interface try-catch event-dispatch-thread


【解决方案1】:

您可以简单地尝试一下,以了解如何将 swingworker 与一些字符串一起使用:

public void runInBackgroud(final String msg)
{
    SwingWorker<Object, Object> task = new SwingWorker<Object, Object> ( )
    {
        public Object doInBackground()
        {
            write(msg);
            return null;
        }
        public void done()
        {}
    };
    task.execute ( );
}

然后调用这个方法runInBackgroud(msg);

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多