Хорошо, что вы удалили Thread.sleep
, так как ваш пользовательский интерфейс не реагирует на эти 2 секунды.
Что вы можете сделать, это запустить Timer
, который запускается только один раз:
int delay = 2000;
Timer timer = new Timer( delay, new ActionListener(){
@Override
public void actionPerformed( ActionEvent e ){
jLabel12.setForeground( Color.red );
}
} );
timer.setRepeats( false );
timer.start();
Обратите внимание, что Timer
является javax.swing.Timer
, что гарантирует, что метод actionPerformed
для ActionListener
вызывается в потоке отправки событий, соблюдая правила потоковой передачи Swing.
Это также возможно с помощью SwingWorker
, но для этого я буду придерживаться Timer
. Если вы хотите использовать SwingWorker
, вы можете просто использовать Thread.sleep
в методе doInBackground()
и обновить JLabel
в методе done()
.
Что-то в строках
class Delay extends SwingWorker<Void, Object> {
@Override
public void doInBackground() {
Thread.sleep( 2000 );
}
@Override
protected void done() {
jLabel12.setForeground( Color.red );
}
}
Проблема здесь - Вы, используют ReadLinesFromFile
задача способом, это не было предназначено.
Чтения Задачи
ReadLinesFromFile список объекты от текстового файла.
, Таким образом, это только читает весь текст из файла, это читает отдельные объекты из файла и возвращает группу объекта ITaskItems. Каждый раз, когда Вы производите список объектов с помощью @()
синтаксис, Вы получите разделенный список, значение по умолчанию которого является точкой с запятой. Этот пример иллюстрирует это поведение:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<ItemGroup>
<Color Include="Red" />
<Color Include="Blue" />
<Color Include="Green" />
</ItemGroup>
<Target Name="Build">
<Message Text="ItemGroup Color: @(Color)" />
</Target>
</Project>
И вывод похож на это:
ItemGroup Color: Red;Blue;Green
Поэтому, в то время как лучшее решение Вашей проблемы состоит в том, чтобы записать задачу MSBuild, которая читает файл в свойство как строка не список объектов, это действительно не, что Вы попросили. Вы спросили, был ли путь для откладывания их, и там использует , MSBuild Преобразовывает .
Преобразования используются, чтобы создать один список от другого и также иметь способность преобразовать использование пользовательского разделителя. Таким образом, ответ должен преобразовать Ваше чтение списка в использование ReadItemsFromFile
в другой список с новыми строками. Вот пример, который делает просто что:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<ItemGroup>
<File Include="$(MSBuildProjectDirectory)\Test.txt" />
</ItemGroup>
<Target Name="Build">
<ReadLinesFromFile File="@(File)">
<Output TaskParameter="Lines" ItemName="FileContents" />
</ReadLinesFromFile>
<Message Text="FileContents: @(FileContents)" />
<Message Text="FileContents Transformed: @(FileContents->'%(Identity)', '%0a%0d')" />
</Target>
</Project>
Test.text похож:
Red
Green
Blue
И вывод похож на это:
[C:\temp]:: msbuild test.proj
Microsoft (R) Build Engine Version 3.5.21022.8
[Microsoft .NET Framework, Version 2.0.50727.1433]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Build started 11/8/2008 8:16:59 AM.
Project "C:\temp\test.proj" on node 0 (default targets).
FileContents: Red;Green;Blue
FileContents Transformed: Red
Green
Blue
Done Building Project "C:\temp\test.proj" (default targets).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:00.03
, Что продолжается вот, две вещи.
@(FileContents->'%(Identity)', '%0a%0d')
Identity
), но пользовательский разделитель '%0a%0d'
%0a
) и возврат каретки (%0d
) Вместо @ (FileContents -> '% (Identity)', '% 0a% 0d') я считаю, что вы можете использовать @ (FileContents, '% 0a% 0d')