كيف يمكنني الوصول إلى الفئات التي تم تحميلها بواسطة Java Web Start عند تجميع التعليمات البرمجية ديناميكيًا؟

StackOverflow https://stackoverflow.com/questions/100737

سؤال

أقوم بتجميع التعليمات البرمجية ديناميكيًا في تطبيق العميل الخاص بي.عندما أبدأ التطبيق باستخدام Java Web Start، أحصل على استثناء.يحدث الاستثناء فقط عند تشغيله من خلال Java Web Start.

//The exception
evolver.core.model.change.execution.ExecutionException: Compilation failed!

DynamicComparator.java:2: package evolver.core.model.i does not exist
import evolver.core.model.i.IDefaultObject;
                           ^
DynamicComparator.java:9: cannot find symbol
symbol  : class PropertyBag
location: class DynamicComparator
PropertyBag b2 = new PropertyBag(dob2);
                     ^

يجب أن يتم توفير propertybag أعلاه من قبل JNLPClassloader لأنه جزء من أحد الملفات التي تم تنزيلها بواسطة JWS

الكود الذي يسبب المشكلة يبدو هكذا.

public static int compile(String javaFileName) {    
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    PrintWriter w = new PrintWriter(os);
    int res = com.sun.tools.javac.Main.compile(new String[]{"-d", "./", javaFileName}, w);
    if (res != 0)
        throw new ExecutionException("Compilation failed!" + "\n\n" + os.toString());
    return res;
}

اي مساعدة ستكون مقدرة!

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

المحلول

كما هو الحال حاليًا، سيتعين عليك تجميع التعليمات البرمجية على الخادم.يجب ألا يقدم الخادم أي تعليمات برمجية قد تسمح بشن هجمات عبر المواقع، لذا كن حذرًا للغاية.يمكن للعميل بعد ذلك استخدام URLClassLoader.newInstance لتحميله.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top