您可以使用插件片段,因爲Greg已經獲得。一個片段可以有一個platform filter,噹噹前平臺不符合過濾器表達式時,該片段將阻止其加載。
爲32位WINDWS的平臺過濾器應該是這樣的:
Eclipse-PlatformFilter: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))
片段還必須指定主機捆綁。在運行時,片段資源合併到宿主束
Fragment-Host: the.parent.bundle
的類空間,以避免編譯錯誤,你會在你的主機捆綁的接口或抽象類,並適用於Windows不同的實現兩個片段和Linux。
Windows實現可以安全地訪問hwnd
字段,並且Linux實現可以返回一個值,指示縮放不可用/修復。
例如,主機束將具有ScaleProvider
:
class abstract ScaleProvider {
ScaleProvider getInstance() {
String className = ScaleProvider.class + "Impl";
try {
Class<?> implClass = ScaleProvider.class.getClassLoader().loadClass(className);
return (ScaleProvider)implClass.newInstance();
} catch(ClassNotFoundException | InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
abstract float getScale(Gc gc);
}
爲簡潔起見,實施裝載機和接口描述是在一種類型。 getInstance()
代碼預計名爲ScaleProviderImpl
的類將出現在同一個包中。
的ScaleProviderImpl
類由匹配當前平臺和將具有類
class ScaleProviderImpl extends ScaleProvider {
float getScale(Gc gc) {
// platform-specific implementation
}
}
本示例假定總有一個匹配的平臺特定片段存在於片段中。但是,如果沒有找到ScaleProviderImpl
,您當然可以更改getInstance()
代碼以返回默認實現。
這是一個Eclipse RCP應用程序(它具有這種機制)或只是一個SWT應用程序? –
補充說明,這是一個eclipse rcp應用程序。什麼機制?我環顧了一下,但找不到任何東西。 – dutt
您可以將「插件片段」與平臺過濾器一起使用,以便僅在所選平臺上使用它。 –