Показаны сообщения с ярлыком java. Показать все сообщения
Показаны сообщения с ярлыком java. Показать все сообщения

среда, 24 марта 2010 г.

Регулярные выражения

Регулярные выражения (Pattern, Matcher):
String input = "Here is a WikiWord followed by AnotherWikiWord, then SomeWikiWord.";
Pattern pattern = Pattern.compile("[A-Z][a-z]*([A-Z][a-z]*)+");
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
  System.out.println("Found this wiki word: " + matcher.group());
}


* This source code was highlighted with Source Code Highlighter.

На выходе должны быть:
Found this wiki word: WikiWord
Found this wiki word: AnotherWikiWord
Found this wiki word: SomeWikiWord
http://www.ibm.com/developerworks/ru/edu/j-intermed/section5.html

Парсинг дат

Парсинг дат (DateFormat, SimpleDateFormat):
try {
 // Some examples DateFormat
 DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
 Date date = (Date)formatter.parse("01/29/02");
 formatter = new SimpleDateFormat("dd-MMM-yy");
 date = (Date)formatter.parse("29-Jan-02");
 // Parse a date and time; see also
 //Parsing the Time Using a Custom Format
 formatter = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
 date = (Date)formatter.parse("2002.01.29.08.36.33");
 formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
 date = (Date)formatter.parse("Tue, 29 Jan 2002 22:14:02 -0500");
} catch (ParseException e) { }


* This source code was highlighted with Source Code Highlighter.
http://www.exampledepot.com/egs/java.text/ParseDate.html

пятница, 26 февраля 2010 г.

среда, 10 февраля 2010 г.

Производительность java-программ

Производительность java-программ можно увеличить, если применить серверные настройки (которые не так сильно экономят память, как настройки по умолчанию):
java -server MyApp
Если верить публикациям в интернете, то производительность может иногда увеличиться в два раза.

вторник, 9 февраля 2010 г.

Swing и многопоточность

Для прорисовки интерфейса в Java с помощью библиотеки swing лучше пользоваться, например, SwingUtilities.invokeLater(Runnable r), а не обычно создавать поток и запускать в нем Runnable. В противном случае будут лезть непонятные ошибки типа JTable Exception in thread "AWT-EventQueue-0" (ArrayIndexOutOfBoundsEx...) или подобные. Это происходит потому, что обращаться к swing-компонентам можно только из потока Event Dispatch Thread (EDT). Функцияция invokeLater ставит задачу в очередь на потоке EDT (т.к. все взаимодействие с swing-овскими графическими элементами управления необходимо осуществавлять только в потоке EDT). Но это не работает в случае, если необходимо выполнить длительный процесс, который заставит ждать поток EDT. Для таких случаев необходимо вместо обычного Thread задействовать SwingWorker.
Очень хорошая русскоязычная статья по этой теме:
http://developers.sun.ru/content/view/159/89/
и еще одна статья (видимо, слегка устаревшая):
http://www.ibm.com/developerworks/ru/edu/j-medswing/section4.html

Очень важно понять, что никаких обращений к swing-компонентам внутри метода SwingWorker.doInBackground() быть не должно т.к. он выполняется в отдельном потоке (не EDT) и если обращаться к swing-компонентам не из EDT потока, то это может стать причиной возникновения исключений. Вывод результатов можно производить, например, в методе SwingWorker.done(), который выполняется в потоке EDT и автоматически вызывается после того, как doInBackground() завершит свою работу, что оберегает нас от возможных проблем.

пятница, 4 декабря 2009 г.

LayoutManager-ы

Кроме станадртного BorderLayout, весьма удобно использовать GridBagLayout.
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/GridBagLayout.html

четверг, 3 декабря 2009 г.

Скрытие cmd-окна при запуске java-программ

Достаточно странные результаты в первых строчках выдает гугл, если спросить у него "how to hide cmd window in windows" или "hide cmd line". Ведь просто-напросто необходимо запустить некую программу с параметрами ипосле запуска командная строка уже не нужна и сильно раздражает. Для этого можно использовать команду start с ключом /b. Конкретно у меня проблема возникла при запуске джавашных программ, хотя то же, естественно, применимо для любых не-консольных программ, запускающихся с параметрами. Для джавы решение такое:

1) использовать не java, а jawaw;
2)указать командному интерпретатору Windows скрыть окно.

Если раньше cmd-файлик запуска java-класса был таким:

java -Xms128m -Xmx512m -classpath F:\Projects\JavaProjects\GetOborotToBank\bin;F:\Projects\JavaProjects\GetOborotToBank\lib\classes12.jar GetOborotToBank -outfile c:\outfile.txt

Теперь он выглядит так:

start /B javaw -Xms128m -Xmx512m -classpath F:\Projects\JavaProjects\GetOborotToBank\bin;F:\Projects\JavaProjects\GetOborotToBank\lib\classes12.jar;F:\Projects\JavaProjects\GetOborotToBank\lib\javadbf.jar GetOborotToBank -outfile c:\outfile.txt

То есть мы "java" заменили на "javaw" и перед командой добавили "start /B". Последнее действие скрывает cmd-окно.

Взято отсюда:
http://www.rsdn.ru/forum/java/2647235.flat.aspx

Официальная майкрософтовская справка по команде start:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/start.mspx?mfr=true


воскресенье, 29 ноября 2009 г.

Regex и файловая маска

Часто надо было отфильтровать файлы по некоему общему признаку в их имени. Для этого можно использовать регулярные выражения. Писать регулярные выражения в конфиг-файле достаточно неудобно, да и объяснять пользователям, что будет искать то или иное регулярное выражение еще сложнее. Поэтому проще использовать обычную файловую маску, а из нее уже в программе получать нужное регулярное выражение:

public String getRegexFromFileMask(String fileMask) {
  String regexStr = fileMask.replaceAll("[*]{1}", "[a-zA-Z_0-9]{0,}");
  regexStr = regexStr.replaceAll("[\\.]{1}", "\\\\.");
  regexStr = regexStr.replaceAll("\\?", "[0-9]{1}");
  return regexStr;
}


* This source code was highlighted with Source Code Highlighter.

Таким образом мы, например:
из строки "log*.txt" получаем "log[a-zA-Z_0-9]{0,}\.txt"

* This source code was highlighted with Source Code Highlighter.

суббота, 28 ноября 2009 г.