Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Java 5 и Java 6


Автор: techmax 18.9.2007, 10:58
Можно ли использовать классы скомпилированные по 6 при работе на 5 java, если используется к 
некоторые фитчи из 6 к примеру.
Код

String javaVersion = System.getProperty("java.version");
      if(javaVersion != null && javaVersion.startsWith("1.6")){
        System.out.println("Desktop " + javaVersion);
        java.awt.Desktop.getDesktop().open(file);
      } else{
        System.out.println(javaVersion);
          String fileName = file.getAbsolutePath();
        java.lang.Runtime.getRuntime().exec( getRunCommand(fileName),null, file.getParentFile());

      }

Я протестировал вроде работает. Но не возникнут ли какие-нибудь грабли

Автор: LSD 18.9.2007, 21:59
Цитата(techmax @  18.9.2007,  11:58 Найти цитируемый пост)
Я протестировал вроде работает. Но не возникнут ли какие-нибудь грабли

Уж не знаю как ты тестировал, но в JDK 1.5 класса java.awt.Desktop нет и соответственно твой код при запуске выкинет ClassNotFoundException.

Автор: techmax 19.9.2007, 04:49
Как тестировал. Скомпилил под JDK 1.6. И запустил Jar файл под 1.5. 
Так он же  обращается к java.awt.Desktop  только когда версия 1.6.
И как я понимаю если не использую какой-то класс то JVm должно быть без разницы существует он или нет,
насколько я помню загрузка класс начинается при обращении к нему

Автор: UnicornMirage 19.9.2007, 11:58
Код

И как я понимаю если не использую какой-то класс то JVm должно быть без разницы существует он или нет,
насколько я помню загрузка класс начинается при обращении к нему

думаю что это верно, и твой код будет работать пока не наткнется во времени выполнения на несуществующий класс.. 

Автор: bars_uz 20.9.2007, 13:39
Как Я понемаеу эта реалн...  если ти будеш проверять  JVM то может бит твоя идея проканает

Автор: AxNe0 24.9.2007, 21:13
LSD прав. Ты запускаешь метод своего класса A, написанного на 5-й версии, он обращается к классу B, скомпиленному в 6-й. Класс B вызывает метод класса C, которого не существует. И тут, о чудо! Точнее нет, не чудо, а вполне адекватная реакция JVM - летит ClassNotFoundException! ;)

Автор: techmax 25.9.2007, 04:41
Я понимаю что если класса не существует вылетит ClassNotFoundException. Но дело в том что я знаю что этого класса нет и в зависимости от версии JVM обращаюсь к тому методу который существует. И весь вопрос в том не возникнет ли при этом каких-нибудь проблем. А то очень не хочется вести разные билды для разных JVM

Автор: AxNe0 25.9.2007, 08:29
так бы сразу и сказал smile в таком случае, думаю, будет нормально работать... Но я бы на твоем месте сделал под более старой версией JDK, если уж так важна совместимость с 1.5

Автор: techmax 25.9.2007, 09:24
Просто хочется использовать некоторые возможности Java 6. А пока все клиенты переедут на 6 пройдет очень много времени

Автор: lando1 26.9.2007, 19:09
ну можешь проверять есть ли в JVM класс java.awt.Desktop - ежели есть - то jdk не менее 6.

Автор: COVD 26.9.2007, 20:21
Цитата

А пока все клиенты переедут на 6 пройдет очень много времени 


Если профессиональная деятельность клиентов далека от программирования, то, возможно, они никогда не переедут, если их не вынудить.  smile 

Автор: techmax 27.9.2007, 04:40
Цитата(lando1 @ 26.9.2007,  19:09)
ну можешь проверять есть ли в JVM класс java.awt.Desktop - ежели есть - то jdk не менее 6.

Лучше наоборот если jdk 6 то в нем есть java.awt.Desktop. 

Автор: SergikXP 3.10.2007, 16:03
А как у вас получилось запустить приложение скомпилированное 6й явой на 5й?
в 6й совсем другой ClassLoader... и 5я вроде как о нйм совсем не знает...?

Автор: techmax 4.10.2007, 03:55
Не понял вопроса? в каком смысле другой ClassLoader? 
Как запустил java - jar test.jar

Автор: jaspeen 4.10.2007, 20:53
Я вот получаю 
Код
java.lang.UnsupportedClassVersionError

при попытке запустить шото скомпиленное под 6-ю на 5-й.
Вроде как так и должно быть, нет?

Автор: techmax 5.10.2007, 04:21
Это наверное из-за того что при компиляции надо указать под JDK 6  
что-то типа ключа target  v 5.0. 
Если не сложно то опубликуй кусок кода который не работает. 
Я так и не определился стоит ли так делать. Хотя где-то встречал использование различных классов в зависимости
от версии JVM только не как не могу вспомнить где.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)