вторник, 14 февраля 2017 г.

Java beginner error: non-static method ... cannot be referenced from a static context

Есть класс, в нем главный метод и второй, который вызывается с параметрами в главном.
class A {
 public static void main(String args[]) {
  m2(a)
 }
 public int m2(boolean b) {
  ...
 }
}
Ошибка возникла при непонимании отсутствии в описании второго метода ключевого слова static (т.е. нужно было public static int m2(boolean b) ).
Static означает, что метод принадлежит классу, а не объекту классу, и вызвать его можно тогда напрямую m2(a). При отсутствии static, нужно было бы создать объект класса и вызывать от него, что-то вроде:
A obj = new A();
obj.m2(a);

пятница, 10 февраля 2017 г.

Windows mklink

mklink
Создает символьную ссылку.

MKLINK [[/D] | [/H] | [/J]] Ссылка Назначение

        /D          Создает символьную ссылку на каталог.
                    По умолчанию создается символьная ссылка на файл.
        /H          Создает жесткую связь вместо символьной ссылки.
        /J          Создает соединение для каталога.
        Ссылка      Указывает имя новой символьной ссылки.
        Назначение  Указывает путь (относительный или абсолютный), на который ссылается
                    новая ссылка.

Работает от администратора.

Как использовать.
Есть интернет клиент-банк, который нельзя по их требованиям запускать на терминальном сервере, но нам надо. Этот клиент-банк при инсталляции пишет в реестр пути размещения в HKLM и в окружение PATH путь к хранению сертификатов. Проблема в том, что при каждом входе информация из каталога хранения сертификатов программой удаляется, и, на основании токена, скачивается с сервера клиент-банка. Т.е. одновременная работа бухгалтеров невозможна.

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

mklink /D c:\IKB K:

где K: это будет сетевой диск (на данный момент не созданный). Т.е. после запуска команды ссылка создастся, но по ней перейти никуда нельзя.

Теперь под каждым пользователем нужно подключать свою сетевую папку, как диск K:

net use K: \\net\path\to\IKB /PERSISTENT:YES

Теперь все работает как нужно