سؤال

ما هي أفضل طريقة لتحديد ما إذا كان إصدار JRE تثبيت على جهاز مرتفع بما يكفي لتطبيق التي يريد المستخدم لتشغيل؟ هل هناك طريقة للقيام بذلك باستخدام الاشياء جافا الوحيد؟ أود الحل للعمل على ويندوز / لينكس / ماكوسكس - إذا كان إصدار JRE منخفض جدا يجب أن يتم عرض رسالة. حاليا أنا الحصول على استثناء إذا أحاول تشغيلها على جافا 1.5 (بني التطبيق لجاوا 1.6). اذا لم يكن هناك حل شامل، ما هي أفضل طريقة للقيام بذلك على ويندوز؟

هل كانت مفيدة؟

المحلول

وتطبيق بنيت عن إصدار أعلى لن يتم تشغيل JRE على أقل الإصدار JRE. لذلك فإنك لن تكون قادرا على مجرد إضافة رمز إلى التطبيق الخاص بك للتحقق من إصدار JRE - إذا كان إصدار JRE غير متوافق، من شأنه أن كود JRE-الإصدار فحص الخاص بك لا تعمل في المقام الأول

ما عليك أن تفعله هو أن يكون نوعا من تطبيق قاذفة التي بنيت لانخفاض إصدار JRE (1.3؟) يتحقق النسخة ثم تطلق التطبيق الخاص بك إذا لزم الأمر. هذا النوع من الأصوات kludgy لي.

وماذا عن فحص النسخة أثناء التثبيت؟ هل تثبيت التطبيق بطريقة تسمح لك للتحقق متغيرات البيئة، أو القيام بأي نوع من البرمجة؟

نصائح أخرى

هل يمكن أن تفعل هذا التفكير باستخدام واثنين من المجمعين. تجميع فئة الرئيسية مع الإصدار الأقدم جافا كنت تريد أن تكون قادرة على تشغيل على الإطلاق مع. فإنه يتحقق النسخة باستخدام System.getProperty("java.version")، أو أيا كان، ثم يستخدم انعكاس لتحميل الخاص بك حقيقية الفئة الرئيسية اذا اجيز هذا الاختيار، وربما حتى تحميل جرة مباشرة. ينبغي أن JRE يتم تحميل أي الفئات التي لم تكن المشار إليه من قبل فئة الرئيسي الخاص الخارجي في وقت الترجمة.

وكنت قد تنظر جافا webstart و. حتى إذا كان اسم يعني شيئا مثل تطبيقات، ولكن عن تطبيقات بذاتها. webstart وهو قاذفة، أن يتحقق على ملف JNLP (بسيط XML ملف، حيث يمكنك تكوين تحميل في موقع من التطبيق الخاص بك، وهناك حاجة جافا نسخة وبعض غيرها من البيانات الوصفية) ويبدأ التطبيق الخاص بك مع 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> 

ووالاحتمال الثاني هو استخدام-برنامج قاذفة. ومن الأمثلة على ذلك أباتشي العموم قاذفة . يمكنك أيضا إرسال بعض قاذفة التطبيق نفسك، ولكن هذا عادة لا يستحق كل هذا الجهد.

ويمكنك أن تجرب استخدام العموم-قاذفة، والتي تتيح لك إعدادات البيئة المختلفة الإعداد أو تنفيذ ما قبل الشيكات قبل استدعاء التطبيق الخاص بك.

http://commons.apache.org/launcher

وعموما، لقد اقترب هذا مع C أو (عندما يونيكس فقط) قذيفة المجمع. غير متأكد من هذا العمل حقا بالنسبة لك.

ونحن أيضا التعامل مع هذا عن طريق تضمين JRE في منتجاتنا. يعتني 99.9٪ من الحالات (وغيرها من 0.1٪ من الوقت هو مستخدم تغيير صراحة تكوين لدينا لاستخدام JVM مختلفة). مرة أخرى، ولست متأكدا أن هذا هو حل معقول بالنسبة لك.

في حالتنا، هناك كميات كبيرة من التعليمات البرمجية الأصلية (JNI وغير ذلك)، لذلك الخياطة صورة للتثبيت لكل منصة ندعم مطلوب على أي حال. ولكن إذا كنت تتعامل مع حل نقية جافا، قد يكون ببساطة لتوثيق الحد الأدنى ونقول للناس للحصول على مع برنامج (لا يقصد التورية) لو انهم لتشغيل الاشياء الخاصة بك. انها شيء على مثل الناس يشكون من شأنها أن بلدي ماك لا تعمل MSVC، أو أن بلدي مربع لينكس هو وجود مشاكل في تشغيل علب من العالم. وهذا ليس فقط في (الظاهرية) آلة يستهدف البرنامج ل- تحتاج إلى تبديل. على الأقل في العالم جافا، ونحن حقا أن نطلق على هذا ترقية، على الرغم من دون جرح مشاعر الدينية OS أحد. (حاول تشرح للمستخدم ماك ل"ترقية" إلى نظام التشغيل Windows XP لتشغيل MSVC - هناك ضربات إلى أسفل في انتظار ان يحدث)

ويمكنك أن تطلب نسخة جافا عند تشغيل الأمر جاوة، على سبيل المثال java -version:1.6* com.me.MyClass. لست متأكدا إذا كان هذا يعمل على جميع الإصدارات من جاوة، لكنه يعمل موافق على 1.6 على أي حال.

لقاذفة - التحقق من الإصدار في هناك

داخل 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 التي تحتج <م> حقيقية الرئيسية () في 1.6 الفصول الدراسية. إذا تم طرح استثناء فئة غير معتمد لهم قبض عليه وعرض رسالة خطأ لطيفة.

وهنا هو رمز للحصول على نسخة JRE المثبتة في النظام.

var list = deployJava.getJREs();
var result = "";
result = list[0];
for (var i=1; i<list.length; i++)
{
    result += ", " + list[i];
} 
document.write("jre version : "+result);

وSystem.getProperties () يعطيك قائمة من الخصائص JVM بما في ذلك هويات نسخة مختلفة من JRE، JVM والمواصفات. ينفذ هذا لكافة إصدارات جافا لذلك يجب أن تعمل بغض النظر عن إصدار جمعت في والإصدار تشغيل في، أو تنفيذ.

إذا كتابة فئة أساسية لاختبار النسخة، يمكنك استدعاء هذه أول مرة في الرئيسية () صفك إطلاق. يجب أن يكون حقا الوظائف الأساسية على الرغم أو ربما خطر كسرها.

وهم .. اتصل بي رجل ممل، ولكن ما هو الخطأ في استخدام Launch4J أو أي قاذفة المحلية الأخرى، على سبيل المثال.

استخدم قاذفة الأم التحقق من إصدار JVM قبل بالفعل تشغيل التعليمات البرمجية. جافا الحلول الوحيدة (في كتابي) معنى فقط عند التعامل مع المطورين. بمجرد أن تصل للمستخدمين النهائيين، فسوف ندرك أنهم لا يهتمون جافا أو تفاصيل التقنية على الإطلاق. إذا كنت قد كتبت التطبيق الخاص بك في GW-BASIC انهم لن يهتموا أقل ما دام يعمل التطبيق الخاص بك.

إذا لم يتم تثبيت جافا 1.6، سوف lauchner4j يشير المستخدم إلى صفحة التحميل لJDK 1.6. ولهذا ربما أكثر ملاءمة لمشكلتك من فعل السحر في جاوة.

وأجد أن WinRun4J يعمل بشكل جيد جدا بالنسبة لي (ولكن بعد ذلك مرة أخرى اسمحوا لي يكون متحيزا لأنني كتبت ذلك :-)). هذا يتيح لك تحديد الحد الأدنى و / أو إصدار الحد الأقصى لجافا المسموح بها. وسوف يطفو على السطح مربع رسالة للمستخدم إذا لم يتم العثور على نسخة JRE مناسب (ورسالة للتخصيص).

وجميع تلك المذكورة أعلاه هو لعنة جدا معقدة. اذهبوا:

Properties props = System.getProperties()
props.list(System.out)

وسترى كل شيء عن JVM الخاصة بك، JRE، JDK والموظفين. أو الحصول على قيمة معينة عن طريق استخدام:

//full list of possible props you can see if u run code above
String props = System.getProperty(prop)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top