2012-05-03 5 views
0

Я написал апплет для экрана Capture for jre 1.7, jre 1.6 и jre 1.5. Апплет должен использовать прозрачный фон для своего окна. Но для полупрозрачности jre 1.7 (graphicDevice window Translucency) и 1.6 (awtutilities) использует разные api, а для jre 1.5 работает. Теперь, как сделать мой апплет совместимым для всех трех версий?Совместимость версии Java при работе с разными api в другой версии для одной задачи

Я думаю, мне нужно скомпилировать разные классы с разными компиляторами. Но как использовать эти отдельно скомпилированные классы в одном приложении?

+2

Как проверить версию Java и перенаправлять на соответствующий апплет: HTTP: //www.pscode. org/jre.html –

+0

Согласно упомянутой статье ... Я должен использовать три апплета для разных версий и проверить версию jre, чтобы выбрать ее. Но я хочу использовать один апплет и использовать из него все скомпилированные классы. Есть ли способ сделать это? –

+0

@AlexeiKaigorodov Отличный комментарий. +1 См. Мой ответ. –

ответ

0

Если существуют различные интерфейсы, присутствующие в различных версиях Java для одной и той же функциональности (как JWindow.setOpacity() в Java 1.7 и AWTUtilities.setWindowOpacity() в Java 1.6), то можно использовать динамическую загрузку классов использовать API-интерфейсы в зависимости от доступности класса по Java-версии. Вот код, который решил мой случай:

try 
    { 
     Class<?> cls = Class.forName("javax.swing.JWindow"); 
     Method meth = cls.getMethod("setOpacity", float.class); 
     meth.invoke(transparentWindow, 0.50f); 
    } 
    catch (Throwable e) 
    { 
     e.printStackTrace(); 
     try 
     { 
      Class<?> cls = Class.forName("com.sun.awt.AWTUtilities"); 
      Method meth = cls.getMethod("setWindowOpacity", Window.class, 
             float.class); 
      meth.invoke(null, transparentWindow, 0.50f); 
     } 
     catch (Throwable e1) 
     { 
      e1.printStackTrace(); 
     } 
    } 

Надеется, что это помогает новичкам, как когда-то я был :)

0

Согласно упомянутой статье ..

ОК, я чувствую, что должен упасть в на данном этапе, так как я вверх проголосовал замечание @Alexie ..и написал статью и апплет. ;)

1-й вверх. Я в значительной степени забыл этот апплет и собирался предложить JWS/встроенный апплет, но это будет работать только для 1.6_10 + (тогда Sun выпустил плагин 2 JRE - другой для других разработчиков JRE).

Затем, когда I рассмотрел апплет, стало очевидно, что Алекси прибила его. С несколькими страницами, некоторыми версиями Jars и небольшим «прыжком через обручи», он может выполнить спецификацию.

Вот как это будет работать.

  • есть «общественное ссылку» указывает на версию апплета 1.7+ (например, называется: applet.html, используя archive="appletcommon.jar,applet7.jar"). Используйте Java Version Checker Applet для проверки на 1.7 (или за ее пределами). Если не:
    • Переадресация на applet6.html, для 1.6 archive="appletcommon.jar,applet6.jar". Если не:
      • Переадресация на applet5.html, для 1.5 archive="appletcommon.jar". Если не:
        • Перенаправление на страницу, в которой говорится: «Извините, вам нужен плагин 1.4+, см. A, b, c для установки». Вы можете использовать deployJava.js здесь, чтобы спросить «1.2+ Java» - Oracle предоставит самую последнюю публичную версию - я не уверен в Apple или * nix, но ожидал бы того же.

Важным моментом здесь является прекрасным описание содержания различных архивов. Это ломается.

  • appletcommon.jar Основные классы апплетов, совместимые с минимальной версией, для которой этот апплет доступен (в данном случае - 1.5). источник/цель во время компиляции должен == 1.5 и
  • applet6.jar с 1.6 классами. Тоже варианты компиляции.
  • applet7.jar с 1.7 классами. Тоже параметры компиляции (если не компилировать с 1,7 SDK).