如果使用clear()或setValue(“”),则不会清除Vaadin TextArea

时间:2015-12-09 12:34:51

标签: java eclipse vaadin

我实例化了Vaadin的正常TextArea而没有特别的额外内容。现在在一个线程中我更新了一个长字符串,它应该显示在文本区域内。更新全部发生5秒。我做的是以下内容:

  public void setLogText(String text)
  {
    Runnable uiRunnable = () -> {
      if (logTextArea != null)
      {

        System.out.println("logTextArea");
        logTextArea.setReadOnly(false);
        logTextArea.setValue("");
        logTextArea.markAsDirty();
        logTextArea.setValue(text);
        logTextArea.markAsDirty();
        logTextArea.setCursorPosition(text.length());
        logTextArea.setReadOnly(true);
      }
    };
    UI.getCurrent().access(uiRunnable);
    UI.getCurrent().push();
  }

从放入控制器的线程调用此方法。 现在我的问题是,如果我调用方法setValue("")并在调试模式下运行应用程序,它会将文本设置为""。但之后我将文本设置为线程创建的新文本。此新文本包含旧文本和新文本。现在发生的是,文本将被放入TextArea两次,三次,四次(与线程一样频繁)。

我只想在那里有一次文字。

修改 以下是代码段,从中调用方法setLogTex(...)

new Thread(new Runnable()
    {

      @Override
      public void run()
      {
        while (!Thread.interrupted())
        {
          try
          {
            Files.lines(Vars.LOGGING_LOG_FILE.toPath()).forEach(new Consumer<String>()
            {

              @Override
              public void accept(String t)
              {
                resultString += "\n" + t;
              }
            });

            administrationComponent.setLogText(resultString);

            Thread.sleep(WAIT_TIME_MSEC);
          }
          catch (IOException e)
          {
            Log.warn(AdministrationLogController.class, "Cannot read log file.", e, administrationComponent.getSessionID());
          }
          catch (InterruptedException e)
          {
            Log.warn(AdministrationLogController.class, "The read log file thread has been interrupted.", e,
                administrationComponent.getSessionID());
          }
        }
      }
    }).start();

0 个答案:

没有答案