سؤال

لقد وضعت "أنماط .css" في جذر حزمة بلدي، وحاول الآن معرفة كيفية ربطها في التعليمات البرمجية.المشكلة هي أنه @ .getstylesheets (). إضافة (_) تأخذ سلسلة وليس عنوان URL، لذلك فإن جميع الأساليب التي أعرفها فشلت هنا:

خذ 1:

giveacodicetagpre.

giveacodicetagpre.

خذ 2:

giveacodicetagpre.

giveacodicetagpre.

خذ 3:

giveacodicetagpre.

giveacodicetagpre.

خذ 4:

giveacodicetagpre.

giveacodicetagpre.

أنا أستخدم felix-4.2.1 ، java-8 (بناء 1.8.0-EA-B115) ، javafx-8 (8.0.0-EA-B115) .

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

المحلول

ركض مؤخرا في نفس الخطأ / المشكلات كملصق الأصلي لهذا السؤال وتمكنت من حلها دون إجراء أي تغييرات على CSS / FXML أو استخراجها إلى ملف TEMP. أنا نشرها هنا كما لم أجد أي إجابة جيدة عبر الإنترنت:

في حالتي كانت الإعداد:

bundle0:

  • somview.fxml مع مرجع مسار نسبي إلى ملف CSS
  • somestyle.css مع مراجع المسار النسبي إلى الصور
  • someimage.png
  • resourceloader.java (إرجاع كائنات URL من ملفات CSS وملفات FXML)

bundle1:

  • ملفات Javafx الأساسية لتحميل FXML مع محمل FXML من Bundle0.

المشكلة:

يبدو أن جميع CSS و CSS تمت الإشارة إلى الصور المرجعية من قبل FXML، على الرغم من أنني قمت بتعيين Classlader على Loader FXML. لقد عملت فقط إذا استخدمت مسار ملف مطلق للحصول على CSS والصور المشار إليها في CSS. هذا ليس ما أريد.

الحل:

هناك 2 مشكلات من الأخطاء / التصميم في Javafx تحظر هذا الإعداد من العمل مع OSGI.

  • تحميل CSS من FXML
  • الرجوع إلى الصور من CSS

لإصلاح المشكلة الأولى، يجب عليك تعطيل ملف CSS ثنائي في Javafx عن طريق تعيين خصائص النظام Binary.css إلى False. هناك خطأ في Javafx (ربما تم إصلاحه بالفعل؟) حيث يحاول Javafx أن تكون ذكية وتحاول العثور على ملف BSS، على الرغم من أنك تقول CSS. تنقلب لأن عناوين موارد OSGI لديها مخطط "حزمة: //" حيث لا يتوقع أي مخطط. الحل:

  • -dbinary.css= false

لإصلاح المشكلة الثانية، يجب عليك تعيين Classlader سياق مؤشر الترابط إلى Classloader من الحزمة حيث توجد صور CSS ثم استعادة Classlader سياق مؤشر الترابط. الحيلة هي القيام بذلك في كل مرة يتم فيها تفسير CSS بواسطة Javafx، وهو ليس دائما عندما تتوقع أن تكون ...

giveacodicetagpre.

لسوء الحظ، هذا هو أفضل حل يمكنني أن آتي معه. لم يكن Javafx مصنوعا مع محمل الفئة أو حقن التبعية في الاعتبار، على الرغم من أن تطبيق الشركات فقط يستخدم هذه الوظائف في شكل ما. : (

/ / تحرير يبدو أنك لا تحتاج إلى تعيين Classlader Class Construte Context للوصول إلى الصور من CSS!

نصائح أخرى

السبب وراء تفسير هذا الأمر هنا: Javafx Jira RT-14177 . نظرا لأنك لا تستطيع استخدام "externalform" من الموارد، فقد نسختها في ملف TEMP من خلال قراءة دفق الإدخال مباشرة.

giveacodicetagpre.

آمل حقا أن يساعدك ذلك.

جوناثان

  • تأكد من أنك تستخدم Classlader لفئة يمكن الوصول إلى الحزمة التي تحتوي على ملف CSS
  • إذا كنت تستخدم مسارا نسبيا، فتأكد من أن CSS موجود بالنسبة لحزمة تلك الفئة

هنا هي عينة كيف قمت بتحميل ملف CSS في drombler fx ( droumbler fx هو منصة عميل غنية وحدات ل Javafx بناء على Osgi و Maven(POM-First) ):

http://sourceforge.net/p/drombler/drombler-fx/ci/default/tree/drombler-fx-core-docking/src/الرئيسية / java / org / drombler / fx / core / docking / corper / skin / stylesheets.java

هنا: فئة STYLESHEETS في نفس الحزمة مثل ملف CSS.

getclass (). GetClassloader (). GetResource (). ToExternalform ()؟

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