Программно определите, какой JDK/JRE's установлены на моем поле

Не уверен, упоминался ли этот вопрос, но атрибут ThreadStatic действительно полезен. Это делает статическое поле статическим только для текущего потока.

[ThreadStatic]
private static int _ThreadStaticInteger;

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

И еще одна вещь для потоков приложений ASP.NET используется повторно, так что если вы измените значение, оно может в конечном итоге использоваться для другого запроса страницы.

Тем не менее я нашел это полезным в нескольких случаях. Например, при создании пользовательского класса транзакции, который:

using (DbTransaction tran = new DbTransaction())
{
    DoQuery("...");
    DoQuery("...");    
}

Конструктор DbTransaction устанавливает поле ThreadStatic на свое собственное значение и сбрасывает его на ноль в методе dispose. DoQuery проверяет статическое поле и, если! = Null, использует текущую транзакцию, если нет, то по умолчанию используется что-то другое. Мы избегаем необходимости передавать транзакцию каждому методу, и это облегчает перенос других методов, которые изначально не предназначались для использования с транзакцией внутри транзакции ...

Только одно использование:)

10
задан Amir Afghani 27 July 2009 в 16:26
поделиться

3 ответа

Я бы сначала начал с поиска переменной окружения JAVA_HOME (и, возможно, JDK_HOME, хотя это гораздо реже), а затем определил, какая это версия и JDK или JRE.

После которые проверяют общие места вместо. Найдите каталог системных программных файлов (не просто предполагайте, что это C: \ Program Files, даже если это 99,5% времени) и найдите в нем общие места установки (например, Java).

Я бы не стал этого делать. исчерпывающий поиск.

Стоит спросить: действительно ли вам нужно таким образом находить JDK? Разве вы не можете просто спросить пользователя, какой JDK он хочет использовать, возможно, предложив какие-нибудь простые, которые вы уже нашли?

3
ответ дан 3 December 2019 в 13:56
поделиться
System.out.println(System.getProperty("java.version"));

Другие свойства здесь

35
ответ дан 3 December 2019 в 13:56
поделиться

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

Альтернативный подход заключался бы в объединении крошечного Java-приложения, которое печатает различные детали, такие как запущенная JVM.

1
ответ дан 3 December 2019 в 13:56
поделиться
Другие вопросы по тегам:

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