Проблема в вашем утверждении if
:
if (lang = userLang)
Здесь вы используете оператор присваивания (=
) - это присваивает значение переменной. Вы хотите использовать оператор равенства / сравнения (==
) - это проверяет, равно ли одно значение другому. Измените ваше утверждение if
на следующее:
if (lang == userLang)
И ваш код будет работать.
Просто запустите java
, используя стандартный переключатель командной строки « -verbose: class
» (см. java
документация ). Он будет распечатываться каждый раз при загрузке класса и сообщать вам, откуда он загружен.
Если вы хотите сделать это программно из приложения, попробуйте:
URL loc = MyClass.class.getProtectionDomain().getCodeSource().getLocation();
(обратите внимание, getCodeSource () может возвращать ноль, так что на самом деле не делайте все это в одной строке :))
Так как класс должен прийти откуда-то из пути к классу, я бы рекомендовал просто напечатать путь к классу и проверить, есть ли где-нибудь более старая версия вашего класса.
public static URL getClassURL(Class klass) {
String name = klass.getName();
name = "/" + convertClassToPath(name);
URL url = klass.getResource(name);
return url;
}
public static String convertClassToPath(String className) {
String path = className.replaceAll("\\.", "/") + ".class";
return path;
}
Просто вставьте это куда-нибудь и передайте ему объект Class для класса, определение которого вы хотите найти. Он должен работать независимо от того, откуда он вызван, так как он вызывает getResource () для искомого класса.
public static void main(String[] args) {
System.out.println(getClassURL(String.class));
}
Пример вывода: баночка: Файл: /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar /java/lang/String.class