35418

Java Lib

Лабораторная работа

Информатика, кибернетика и программирование

Научиться запаковывать свои классы в исполняемые jar файлы. Получить практические навыки по использованию сторонних библиотек в виде jar файлов. Изучить технологию JNI и научиться связываться с DLL написанными на С\С++

Русский

2013-09-10

50.52 KB

10 чел.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УО “Полоцкий Государственный Университет”

Факультет Информационных технологий

Отчет
по лабораторной работе №3.2
по курсу “Операционные системы и системное программирование”

«Java Lib»

Выполнил                  студент группы 10-ИТ-1

Шоломицкий В.О.

Проверил           Тычина С. Г.

Полоцк, 2013

Цель работы.

Научиться запаковывать свои классы в исполняемые jar файлы. Получить практические навыки по использованию сторонних библиотек в виде jar файлов. Изучить технологию JNI и научиться связываться с DLL написанными на С\С++.

Задание.

  1.  Взять результирующую программу написанную на лабораторной работе №1. И реализовать все ввод параметров через native метод (строки с выводом передаются в методе);
  2.  Реализовать все метод алгоритма как native и вызвать в нем метод с алгоритмом в java;
  3.  В реализации native методов генерировать исключения и обрабатывать их в java программе;
  4.  Реализовать класс и DLL обертку для вызова функции (и всех сопутствующих, к примеру для получения HWND) из таблицы 3 согласно варианту из Win32 API;
  5.  Запаковать класс обертку в отдельный jar файл, с манифестом, и с версиями;
  6.  Запечатать пакет в созданном в пункте 5 jar файле
  7.  Запустить свою программу с вызовом метода из jar сделанной в пункте 4 - 5.
  8.  Запаковать свою программу в jar файл со всеми требуемыми ресурсами, DLL, оберткой jar.Запустить программу в виде jar файла;
  9.  Запаковать программу как в пункте 7, но без оберткой jar. Запустить программу в виде jar файла.
  10.  Реализовать отдельно программу которая будет загружать ваш jar созданный в    пункте 9.

Вариант – EnumWindow();

Задание 1

Взять программу, написанную на лабораторной работе №1. И реализовать весь ввод параметров через native метод (строки с выводом передаются в методе);

package lab2.ex1;

import java.util.*;

 

public class test{

  private native double scan();

  static{

     System.load("C:\\Users\\origin\\Desktop\\2\\ex1.dll");

  }

   public static void main(String[] args) {

    Scanner con = new Scanner(System.in);

       test t = new test();

       int l = -1;

       

while(l!=0){

       double x = t.scan();

       

       if(x<=0)System.out.println("result : -1");

       if((x>0)&(x<2))System.out.println("result : "+x*x);

       if(x>=2)System.out.println("result : 4");

 

       System.out.println("Continie? (0 - exit)");

       l = con.nextInt();

}

   }     

   }

Листинг ex1.cpp:

#include "stdafx.h"

#include "lab2_ex1_test.h"

JNIEXPORT jdouble JNICALL Java_lab2_ex1_test_scan (JNIEnv *env, jobject)

{

printf("(From DLL) Input x : ");

 double d = 0;

scanf_s("%lf",&d);

 return d;

}

Задание 2 - Реализовать все метод алгоритма как native и вызвать в нем метод с алгоритмом в java;

package lab2.ex2;

import java.util.*;

 

public class test{

  private native void Func();

  static{

     System.load("C:\\Users\\origin\\Desktop\\2\\ex2.dll");

  }

   public static void main(String[] args) {

    Scanner con = new Scanner(System.in);

       test t = new test();

       int l = -1;

       

while(l!=0){

    t.Func();

       System.out.println("\nContinie? (0 - exit)");

       l = con.nextInt();

}

   }

       

   }

Листинг ex2.cpp:

#include "stdafx.h"

#include "lab2_ex2_test.h"

JNIEXPORT void JNICALL Java_lab2_ex2_test_Func (JNIEnv *env, jobject)

{

printf("(From DLL(2)) Input x : ");

 double d = 0;

scanf_s("%lf",&d);

 if(d<=0) printf("result : -1");

   if((d>0)&(d<2)) printf("result : %.2lf",d*d);

   if(d>=2) printf("result : 4");

}

Задание 3 - В реализации native методов генерировать исключения и обрабатывать их в java программе;

package lab2.ex3;

import java.util.*;

 

public class test{

 private native void Exc() throws Exception;

  static{

     System.load("C:\\Users\\origin\\Desktop\\2\\ex3.dll");

  }

   public static void main(String[] args) throws Exception {

    Scanner con = new Scanner(System.in);

       

try{

    test t = new test();

    t.Exc();

    System.out.println("--");

 }

 catch(OutOfMemoryError e)

 {

 System.out.println("\n-----------------------------------------");

 System.out.println(e);

 System.out.println("-----------------------------------------");

 }

   }

   }

Листинг ex3.cpp

#include "stdafx.h"

#include "lab2_ex3_test.h"

JNIEXPORT void JNICALL Java_lab2_ex3_test_Exc (JNIEnv *pEnv, jobject){

 jclass clazz = pEnv->FindClass("java/lang/OutOfMemoryError");

 if (clazz) pEnv->ThrowNew(clazz,"Error from c++");

 pEnv->DeleteLocalRef(clazz);

}

Задание 4 - Реализуем java-программу, в которой будет вызываться native-метод EnumWindows():

package lab2.ex4;

import java.util.*;

 

public class test{

 private native void Enum();

  static{

     System.load("C:\\Users\\origin\\Desktop\\2\\ex4.dll");

  }

   public static void main(String[] args) {

    Scanner con = new Scanner(System.in);

 test t = new test();

    t.Enum();

   }

}

Листинг ex4.cpp

#include "stdafx.h"

#include "lab2_ex4_test.h"

#include "iostream" 

#include "windows.h" 

BOOL CALLBACK GetWD (HWND hWnd, LPARAM lParam) {

 TCHAR c[MAX_PATH];

GetWindowTextA(hWnd,(LPSTR)c,MAX_PATH);

printf("-- %s\n",c);

   return true;

}

JNIEXPORT void JNICALL Java_lab2_ex4_test_Enum(JNIEnv *, jobject)

{

   LPARAM lParam = 1;

   EnumWindows(GetWD,lParam);

}

Задание 5 - Запаковать класс обертку в отдельный jar файл, с манифестом, и с версиями;

Создадим файл MAINFEST.MF, в который запишем:

Manifest-Version: 1.0

Main-Class: test

Задание 6 - Запечатать пакет в созданном в пункте 5 jar файле;

Создадим файл MAINFEST.MF в котором будет содержаться:

Manifest-Version: 1.0

Name: name/

Sealed: true

Main-Class: test

Задание 7 - Запустить свою программу с вызовом метода из jar сделанной в пункте 4 – 5

                             Рис1. – Результат команды javajar ex5.jar

Задание 8 - Запаковать свою программу в jar-файл со всеми требуемыми ресурсами;

import java.util.*;

import java.io.*;

 

public class test{

 private native void Enum();

   private static void loadLib(String name) {

       try {

           InputStream in = test.class.getResourceAsStream(name);

           File fileOut = new File(System.getProperty("java.io.tmpdir") + "/" + name);

           OutputStream out = new FileOutputStream(fileOut);

           int c;

     

  while ((c = in.read()) != -1) {

   out.write(c);

  }

  

  in.close();

  out.close();

           

  System.load(fileOut.toString());

       } catch (Exception e) {

  System.out.println("Error Load dll");

       }

}

 

  static{

  loadLib("ex8.dll");

  }

   public static void main(String[] args) {

    Scanner con = new Scanner(System.in);

 test t = new test();

    t.Enum();

   }

}

Задание 9 - Запуск программы

               Рис2. – Результат команды javajar ex8.jar

Задание 10 - Реализовать отдельно программу, которая будет загружать ваш jar созданный в    пункте 8.

import java.io.*;

import java.lang.reflect.*;

import java.net.*;

import java.util.jar.*;

import java.util.*;

public class test1{

 

private void runProg(String path){

 try{

  System.out.println(path);

  

  JarFile jFile = new JarFile(path);

  Attributes attrs = jFile.getManifest().getMainAttributes();

  String mainClass = attrs.getValue("Main-Class");

  

  System.out.println(mainClass);

  

  URL urls = new File(path).toURL();

  URLClassLoader cl = new URLClassLoader(new URL[]{urls});

  

  Thread.currentThread().setContextClassLoader(cl);

  

  String[] aaa = new String[0];

  Class cMainClass = cl.loadClass(mainClass);

     

  Method main = cMainClass.getMethod("main", new Class[] {aaa.getClass()});

  main.invoke(cMainClass.newInstance(), new Object[] {aaa});

  

 } catch (IOException e){

  e.printStackTrace();

 } catch (NoSuchMethodException e){

  e.printStackTrace();

 } catch (ClassNotFoundException e){

  e.printStackTrace();

 } catch (SecurityException e){

  e.printStackTrace();

 } catch (IllegalAccessException e){

  e.printStackTrace();

 } catch (IllegalArgumentException e){

  e.printStackTrace();

 } catch (InvocationTargetException e){

  e.printStackTrace();

 } catch (InstantiationException e){

  e.printStackTrace();

 }

}

 

 public static void main(String[] args){

  test1 run = new test1();

  

 for (String a : args){

  run.runProg(a);

 }

}

}

Вывод:

Научился запаковывать свои классы в исполняемые jar файлы. Получил практические навыки по использованию сторонних библиотек в jar-файлах. Изучил технологию JNI и научился связываться с DLL написанными на С\С++.


 

А также другие работы, которые могут Вас заинтересовать

52982. Круглий стіл «Фізика за чайним столом» 106.5 KB
  Вчитель: Ми з вами часто стикаємося з багатьма звичними речами але знаємо про них мало а деколи навіть не можемо відповісти на найпростіші запитання про фізичні явища які з цими предметами пов’язані. Але учні також один одному можуть ставити питання які їх цікавлять Вчитель: Перед вами на столі стоять блискучі самовари. 1 Вчитель: А чому у самовара ручки дерев’яні або пластмасові Учень: Дерево або пластмаса – поганий провідник тепла порівняно з металом. Вчитель: Ви помітили що підставивши чашки або склянки до носика самовара вони...
52984. Внеклассное мероприятие по физике «Лирическая физика» 64.5 KB
  1 конкурс Разминка Разминка физическая Кто открыл явление инерции Из чего состоят молекулы Прибор для измерения массы тела Основная единица измерения силы В каком городе жил Архимед Состояние вещества если молекулы расположены в строгом порядке Научные предположения о чем – либо Основная единица количества теплоты Плотность чистой воды Какую физическую величину измеряют мензуркой Как называют изменение формы или размеров тела Как называется процесс превращения пара в жидкость Основная единица...
52985. Взаємодія тіл 1.18 MB
  Запропоновані тестові завдання можуть бути використані як для поточної перевірки знань учнів, так і для тематичних атестацій. Задачі і завдання підібрані різних типів - розрахункові, графічні, якісні, задачі-малюнки, умова яких задається за допомогою малюнка, графіка, фотографії.
52987. Компетентнісний підхід у викладанні фізики 105.5 KB
  Ключові компетенції включають в себе вміння виконувати цілісну ясну грамотну дію вирішувати реальну ситуацію задачу. У зв'язку з цим можна виділити навички та вміння які повинні виникнути у студентів: володіння інформаційними технологіями уміння їх застосовувати збір і обробка необхідної інформації; здатність вчитися все життя це основа безперервної підготовки в професійному плані а також в особистому і суспільному житті; вміння спілкуватися поважати один одного здатність жити з людьми інших культур мов і релігій. Це призводить...
52988. Методичні рекомендації з проведення навчального експерименту в системі вивчення фізики в середній школі 170.5 KB
  Методичні рекомендації з проведення навчального експерименту в системі вивчення фізики в середній школі м. Система шкільного експерименту з фізики. Роль експерименту в процесі вивчення фізики в школі.
52989. ФОРМУВАННЯ САМООСВІТНЬОЇ КОМПЕТЕНТНОСТІ УЧНІВ ЗАСОБАМИ ФІЗИКИ 103 KB
  Модель випускника готового до самоосвіти Засоби організації самоосвітньої діяльності учнів Пам’ятки раціональної організації навчальної роботи школяра як розв’язати задачу як здійснити перевірку розв’язків задачі робота з підручником фізики складання плану відповіді з фізики як скласти конспект як готувати доповідь реферат як працювати з додатковою літературою як готувати домашнє завдання як виконувати письмову домашню роботу Зразки тестів та контрольних робіт для перевірки навчальних досягнень...
52990. Вивчати фізику цікаво 270 KB
  Серед безлічі шляхів формування у школярів пізнавального інтересу одним з найбільш ефективних є організація ігрової діяльності. Ігрові форми навчання дозволяють пожвавити навчальний процес, зробити його більш привабливим для учнів, підвищують інтерес до предмета в цілому, активізують мислення та творчу діяльність учнів.