вівторок, 9 вересня 2014 р.

Патерн «Фабрика»

Вирізка із книги "GoF Design Patterns - with examples using Java and UML2" by: Benneth Christiansson (Ed.) Mattias Forss, Ivar Hagen, Kent Hansson, Johan Jonasson, Mattias Jonasson, Fredrik Lott, Sara Olsson, and Thomas Rosevall. License: Creative Commons Attribution-ShareAlike 3.0 License.

Визначення
Патерн Фабрика (Factory Pattern) надає шлях використання екземпляру як об’єктну фабрику. Фабрика може повертати екземпляр одного з декількох можливих класів (у ієрархії класів), в залежності від заданих даних.

Де використовується:
  • Коли клас не може передбачити, який об’єкт, якого класу потрібно створити
  • Ви хочете вказати, екземпляр якого клас хочете створити
  • Коли ви маєте класи, які походять від одних і тих же класів, або ж класи, які ділять один інтерфейс.  Тобто, методи у екземплярів цих класів одні і ті ж самі і можуть використовуватися взаємозамінно.  
  • Коли ви хочете ізолювати клієнта від актуального типу, що ініціалізується.

середу, 27 серпня 2014 р.

Отримуємо шлях до файлу в кирилиці

Є виконуваний jar файл, поряд з ним у каталозі є підкаталог у якому є файл help.txt. Необхідно запустити jar файл і при виборі із меню пункту "Help" запустити файл help.txt.

Тож все це робиться так:
File currentJavaJarFile = new File
     (Test.class.getProtectionDomain()
     .getCodeSource().getLocation().getPath());
String path=currentJavaJarFile.getParent();
String comand="notepad.exe " + path+"\\Resources\\help.txt";
Runtime.getRuntime().exec(comand);

Проте як виявлось усе працює правильно, якщо шлях до файлу латинськими літерами. Як тільки у шляху з'являється кирилиця, видає помилку знаходження файлу.

Отримати правильно шлях допоможе UrlDecoder:
currentJavaJarFile=new File(java.net.URLDecoder.decode(
            (Test.class.getProtectionDomain().getCodeSource()
            .getLocation().getPath()).toString() ,
            "UTF-8"));




get path with cyrillic

вівторок, 26 серпня 2014 р.

Вибір подальшого шляху (MindMap)

Написанню даної замітки посприяла стаття "Роздоріжжя навколо нас".

Постійно приходиться нагадувати собі що головне, а що другорядне. Хочеться багато чого освоїти, проте реально приходиться зосереджуватися на найбільш актуальному і потрібному для себе в даний час. Вирішив якось промалювати свою інтелект карту в яких напрямках рухатись дальше. В результаті вирішив що краще розділити на декілька невеличких, але основних. У мене вийшло аж 4 основні інтелект карти: Англійська, Математика, Програмування, Java (як підкарта програмування). У перших трьох розгалужень не так і багато, а ось Java вийшла доволі розкішна:) Постарався представити те що я освоїв, але ще варто закріпити знання, або уже почав освоювати, або збираюсь освоїти найближчим, або ж просто є велике бажання в майбутньому освоїти (як то Android SDK). Результат того, що накидав десь за хвилин 20-ть:

Java - My Mind Map

Можна звичайно деталізувати безкінечно, так у Java EE багато цікавого чого хотілось б освоїти, але поки що зобразив як на мене основне.

середу, 13 серпня 2014 р.

Як показати діалог "зберегти" з допомогою JFileChooser

Як показати діалог "зберегти" з допомогою JFileChooser

Якщо вашій програмі потрібно зручно вказати положення файлу, папки або ж місцезбереження файлу, то для цих цілей Swing надає клас javax.swing.JFileChooser. Виклик діалогу збереження файлу схожого на той що використовується у віндовз, здійснюється через метод showSaveDialog():

  public int showSaveDialog(Component parent)

Де parent - це батьківський компонент діалогу, переважно JFrame. Коли користувач введе ім'я файлу і натисне ОК або Cancel, метод повертає одне з наступних значень:

   
   JFileChooser.CANCEL_OPTION // користувач відмінив вибір файлу
   JFileChooser.APPROVE_OPTION // користува здійснив вибір файлу
   FileChooser.ERROR_OPTION // якщо користувач закрив вікно
                            // кнопкою закриття Х.

Після того як користувач здійснив свій вибір, ми можемо використати метод getSelectedFile() щоб взяти нам об'єкт файлу:

    File getSelectedFile()

Перед викликом методу showSaveDialog(),  ви можливо захочете встановити деякі опції для діалогу:
  
    setDialogTitle(String) // встановлює заголовок вікна.
    setCurrentDirectory(File) // встановити директорію для збереження

Приклад коду:

// батьківський компонет діалогового вікна
JFrame parentFrame = new JFrame();
 
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Вкажіть як зберегти файл");   
 
int userSelection = fileChooser.showSaveDialog(parentFrame);
 
if (userSelection == JFileChooser.APPROVE_OPTION) {
    File fileToSave = fileChooser.getSelectedFile();
    System.out.println("Зберегти як: " + fileToSave.getAbsolutePath());
}

Можна встановити фільтр для задання розширень файлу:

 
FileNameExtensionFilter filter = 
                      new FileNameExtensionFilter("csv файл","csv");
fileChooser.setFileFilter(filter);

Вікно може виглядати так:


В результаті отримали об'єкт File і можна створювати потоки вводу-виводу і записувати у файл використовуючи отриманий об'єкт File. Об'єкт File, хто ще не знає є дискриптором файлу і мабуть, основне що в ньому є - це адрес розміщення файлу і його назва.

 При написанні було використано матеріали із codejava.net

пʼятницю, 25 липня 2014 р.

Заміщення (overriding) методів у Java


У відеоуроці розглядається наступне:
Що таке заміщення  методів? 
Чому заміщення і перевизначення це не одне й те саме? 
Дещо про успадкування та поліморфізм у Java.
Особливості статичних методів.
Модифікатор final при визначенні методів Java.


пʼятницю, 11 липня 2014 р.

WindowBuilder Error: Unhandled event loop exception

Вирішив поставити плагін WindowBuilder у Eclipse. При спробі використовувати графічний редактор зразу ж Eclipse почав видавати помилку: Unhandled event loop exception


Думав, знов щось нахомутав при встановленні. Проте завдяки посту:  "Eclipse Bug: Unhandled event loop exception No more handles", довідався що у цьому можуть бути винні деякі процеси запущені у windows. Методом проб і помилок як і у випадку описаному у моєму пості "JVM creation failed" виявилося, що знов винен електронний словник Abby Lingvo. Ну не люблять чомусь Java IDE цю програмку :)  і взагалі продукти фірми ABBY :).

Проблема вирішується або вбивством процесу  LvAgent.exe або ж у налаштуваннях лінгво забрати галочки пов'язані з роботою з клавіатурою, щоб взагалі не було реагувань на клавіші.