Как проверить версию JRE до запуска?

Здесь следует учитывать две вещи.

  1. Вы упомянули, что вы тренируете свою модель на GPU и используете ее для вывода на CPU, поэтому вам нужно добавить параметр map_location в load передача функции torch.device ('cpu') .

  2. Существует несоответствие ключей state_dict (указано в вашем выходном сообщении), которое может быть вызвано некоторыми отсутствующими ключами или наличием большего количества ключей в state_dict , который вы загружаете, чем используемой вами моделью В настоящее время. И для этого вы должны добавить параметр strict со значением False в функции load_state_dict . Это заставит метод игнорировать несоответствие ключей.

Примечание: попробуйте использовать расширение pt или pth для файлов контрольных точек, как это принято.

12
задан Vladimir Prenner 21 October 2008 в 14:54
поделиться

11 ответов

Приложение, созданное для старшей версии JRE, не будет работать на более низкой версии JRE. Таким образом, Вы не смогли бы просто добавить код к своему приложению для проверки версии JRE - если бы версия JRE была несовместимой, то код JRE-проверки-версии не работал бы во-первых.

То, что необходимо было бы сделать, имеют своего рода приложение средства запуска, которое создается для более низкой версии JRE (1.3?), который проверяет версию и затем запускает Ваше приложение при необходимости. Это звучит довольно топорным мне.

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

1
ответ дан 2 December 2019 в 04:34
поделиться

Вы могли сделать это отражение использования и два компилятора. Скомпилируйте основной класс с самой старой версией Java, с которой Вы хотите смочь работать вообще. Это проверяет использование версии System.getProperty("java.version"), или что бы то ни было, и затем использует отражение для загрузки реального основного класса, если та проверка передает, возможно даже загружая банку непосредственно. JRE не должен загружать классы, на которые не сослался Ваш внешний основной класс во время компиляции.

11
ответ дан 2 December 2019 в 04:34
поделиться

Вы могли бы считать Java Webstart. Даже если имя подразумевает что-то как апплеты, это об автономных приложениях. Webstart является средством запуска, которое проверяет JNLP-файл (простой XML-файл, где Вы настраиваете местоположение загрузки своего приложения, необходимой версии Java и некоторых других метаданных), и запускает Ваше приложение с корректного JRE. Это даже обновляет приложение, если более новая версия доступна. Оборотная сторона, необходимо записать JNLP-файл. Вот пример:

<?xml version="1.0" encoding="utf-8"?>

<!--
###############################################################################
#
# @(#)draw.jnlp 1.6 02/09/11
#
# JNLP File for Draw Demo Application
#
###############################################################################
 -->


<jnlp spec="0.2 1.0"
      codebase="http://java.sun.com/javase/technologies/desktop/javawebstart/apps"
      href="draw.jnlp">
   <information> 
      <title>Draw 4 App</title> 
      <vendor>Sun Microsystems, Inc.</vendor>
      <homepage href="http://java.sun.com/javase/technologies/desktop/javawebstart/demos.html"/>
      <description>A minimalist drawing application along the lines of Illustrator</description>
      <description kind="short">Draw Demo Short Description</description>
      <icon href="images/draw.jpg"/>
      <offline-allowed/> 
   </information> 
   <resources>
      <j2se version="1.3+" href="http://java.sun.com/products/autodl/j2se"/>
      <j2se version="1.3+"/>
      <jar href="draw.jar" main="true" download="eager"/>
   </resources>
   <application-desc main-class="Draw"/>
</jnlp> 

Вторая возможность состоит в том, чтобы использовать программу средства запуска. Примером является Apache Средство запуска палаты общин. Можно также записать некоторое приложение для средства запуска сами, но это обычно не стоит усилия.

9
ответ дан 2 December 2019 в 04:34
поделиться

Вы могли бы также рассмотреть использование Средства запуска палаты общин, которое позволяет Вам устанавливать различные параметры среды или выполнять предварительные проверки прежде, чем назвать Ваше приложение.

http://commons.apache.org/launcher

5
ответ дан 2 December 2019 в 04:34
поделиться

Для средства запуска - Проверка версия там.

В APP; как выше использования System.getProperties ();

Properties sProp = java.lang.System.getProperties();
String sVersion = sProp.getProperty("java.version");
sVersion = sVersion.substring(0, 3);
Float f = Float.valueOf(sVersion);
if (f.floatValue() < (float) 1.4) {
    System.out.println("Java version too low ....");
    System.exit(1);
}
...
1
ответ дан 2 December 2019 в 04:34
поделиться

Обычно мы приблизились, это с C или (когда только для Unix) окружает обертку. Не уверенный это будет действительно работать на Вас.

Мы также приближаемся к этому путем встраивания JRE в наш продукт. Заботится о 99,9% случаев (другой 0,1% времени является пользователем, явно изменяющим нашу конфигурацию для использования другой JVM). Снова, не уверенный, что это - разумное решение для Вас.

В нашем случае существуют существенные объемы собственного кода (JNI и иначе), таким образом адаптируя устанавливаемое изображение для каждой платформы, которую мы поддерживаем, требуется так или иначе. Но если Вы имеете дело с решением чистого Java, Вам, вероятно, просто придется зарегистрировать Ваш минимум и сказать людям добираться с программой (никакая предназначенная игра слов), если они должны выполнить Ваш материал. Это - вид подобных людей, жалующихся, что мой Mac не выполнит MSVC, или что мое поле Linux имеет проблемы при выполнении World of Warcraft. Это - просто не (виртуальная) машина, для которой предназначено программное обеспечение - необходимо переключиться. По крайней мере, в мире Java, мы действительно можем назвать это обновлением, тем не менее, не задевая ничье религиозное ОС самолюбие. (Попытайтесь говорить пользователю Mac "обновлять" до Windows XP для выполнения MSVC - существует избитое вниз неизбежное.)

2
ответ дан 2 December 2019 в 04:34
поделиться

System.getProperties () дает Вам список свойств JVM включая различные идентификаторы версии JRE, JVM и спецификации. Реализованный для всех версий Java так должен работать независимо от версии, скомпилированной в и версии, выполненной в, или реализация.

Если Вы пишете основной класс для тестирования версии, можно назвать это сначала в основном () запускающимся классом. Это должна действительно быть основная функциональность, хотя или Вы могли бы рискнуть повреждать его.

0
ответ дан 2 December 2019 в 04:34
поделиться

Хм.. назовите меня скучным парнем, но что случилось с использованием Launch4J или любого другого собственного средства запуска, например.

Используйте собственное средство запуска для проверки версии JVM прежде на самом деле выполнить код. Java только решения (в моей книге) только имеют смысл, когда Вы имеете дело с разработчиками; после того как Вы поражаете конечных пользователей, Вы поймете, что они не заботятся о Java или его технических деталях вообще. Если бы Вы записали бы свое приложение в GW-Basic, они не заботились бы меньше пока Ваши работы приложения.

Если Java 1.6 не будет установлен, то lauchner4j укажет на пользователя на страницу загрузки для JDK 1.6. Это, вероятно, более подходит для Вашей проблемы, чем выполнение волшебства в Java.

0
ответ дан 2 December 2019 в 04:34
поделиться

I find that WinRun4J works quite well for me (but then again I may be biased since I wrote it:-)). This lets you specify a minimum and/or maximum version of java allowed. It will pop up a message box to the user if a suitable JRE version is not found (and the message is customisable).

0
ответ дан 2 December 2019 в 04:34
поделиться

Вы можете потребовать версию Java при запуске команды Java, например java -version: 1.6 * com.me.MyClass . Не уверен, что это работает на всех выпусках Java, но все равно работает на 1.6.

2
ответ дан 2 December 2019 в 04:34
поделиться

Создайте стартовый класс, скомпилированный для Java 1.2, который вызывает реальный main () в ваших классах 1.6. Если возникает исключение неподдерживаемого класса, они ловят его и отображают красивое сообщение об ошибке.

1
ответ дан 2 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: