2015-03-07 1 views
0

У меня есть TextArea, что я хотел бы иметь возможность добавлять символы или слова в течение определенного периода времени. Я использую Timer из java.util, и когда я запускаю приложение в Eclipse, все работает нормально, но когда я экспортирую приложение в .jar, у меня проблема с производительностью.Проблема с производительностью Java Text Texturea в .jar

Вот видео с Eclipse: http://pl.tinypic.com/r/4ftw1f/8

Вот .jar: http://pl.tinypic.com/r/6zmoon/8

И код:

@FXML 
private TextArea textarea; 


public void start(KeyEvent keyEvent) 
{ 
    if (keyEvent.getCode() == KeyCode.ENTER) 
    { 
     new Timer().schedule(
       new TimerTask() { 
        int i; 
        @Override 
        public void run() { 
         textarea.appendText("hey" + i + "\n"); 
         i++; 
        } 
       }, 0, 500); 

    } 
} 
+0

Можете ли вы воспроизвести его после перезагрузки компьютера? –

ответ

2

Ваш код многопоточной вопросы: в Java 8 это будет просто выбросить IllegalStateException s, когда вы пытаетесь обновить пользовательский интерфейс из фонового потока. Вам необходимо

 if (event.getCode() == KeyCode.ENTER) 
     { 
      new Timer().schedule(
        new TimerTask() { 
         int i; 
         @Override 
         public void run() { 
          String message = "hey"+i+"\n"; 
          Platform.runLater(() -> textArea.appendText(message)); 
          i++; 
         } 
        }, 0, 500); 

     } 

Я не знаю, будет ли это исправлять проблемы с производительностью или нет. Добавление текста в текстовую область по существу предполагает выполнение множества конкатенаций строк; в конце концов (поскольку текст в текстовой области становится длинным), это будет непомерно высоким. Возможно, вы захотите использовать виртуализованный элемент управления (например, ListView), в зависимости от требуемой функциональности.

+0

Спасибо, теперь работает так же, как в Eclipse :) – Przemex3000

Смежные вопросы