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 написанными на С\С++.


 

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

12329. Аралық бақылау сұрақтары 472.21 KB
  I IIаралық бақылау сұрақтары 1.Социология дегеніміз қандай ғылым. 2.Социологиялық ұғымдарлың ерекшеліктері. 3.Социологиялық парадигмалардың сипаттамалары. 4.Социологияның өмірге келуінің саяси әлеуметтік экономикалық рухани алғышарттары. 5.Социологияның атқара...
12330. ӘЛЕУМЕТТАНУ ҒЫЛЫМ РЕТІНДЕ 838.5 KB
  І. ӘЛЕУМЕТТАНУ ҒЫЛЫМ РЕТІНДЕ Әлеуметтанудың объектісі пәні мен әдістері. Әлеуметтанудың құрылымы мен білім деңгейлері. Әлеуметтанудың атқаратын қызметі функциясы. Әлеуметтанудың басқа қоғамдық және гуманитарлық ғылымдармен байланысы. 1. ӘЛЕУМЕТТАНУ
12331. ӘЛЕУМЕТТІК ИНСТИТУТТАР МЕН ӘЛЕУМЕТТІК ҰЙЫМДАР 272.5 KB
  Екіншіден, ұйым деп құрылымның элементтерінің тәртіптелу деңгейі, объектінің ішкі құрылымын айтамыз. Бұл мағынада объектінің жоғары немесе төмен ұйымдасқандығы туралы айтады. Барлық әлеуметтік объектілердің өзінің ұйымы бар, яғни өзін құрайтын элементтердің байланыстары бар.
12332. Әлеуметтік стратификация және әлеуметтік мобильділік теориясы 324 KB
  Әлеуметтік стратификация және әлеуметтік мобильділік теориясы 1. Қоғамның әлеуметтік топқа жіктелуі. 2. Әлеуметтік стратификация теориясы және оның мәні 3. Әлеуметтік мобильдік және оның түрлері. 4. Қазіргі Қазақстандағы әлеуметтік стратификация ме
12333. Әлеуметтану пәні бойынша Тест жауаптары. 37.3 KB
  Әлеуметтану пәні бойынша Тест жауаптары. Әлеуметтану ғылымы пән ретінде Қоғам – адамзат дамуының белгілі бір тарихи кезеңінде өз қажеттерін канағаттандыру мақсатында тұрақты және біртұтас қалыптасқан әлеуметтік нормалар мен әдетғұрыптар негізінде өзара байл...
12334. Әлеуметтанудың қалыптасуы, оның зерттеу объектісі мен пәні 2.71 MB
  PAGE 1 АЛҒЫ СӨЗ Әлеуметтану теориялық және практикалық түрғыдан алғанда аса қызықты да пайдалы ғылым. Ол маңызды әрі күрделі объектіні яғни адамзат қоғамын оның құрылымы мен даму заңдарын адамдар мен қауымдастықтарда және әлеуметтік топтарда қандай әле
12335. Әлеуметтану ғылым ретінде 51.16 KB
  Әлеуметтану ғылым ретінде Әлеуметтану ғылым ретінде Әлеуметтану ғылыми білімнің дара саласы ретінде біршама кеш қалыптасты. Оның негізін 19 ғасырдың екінші жартысында Огюст Конт пен Герберт Спенсер қалады. Әлеуметтану түсінігі алғаш рет француз философы әрі социол...
12336. ӘЛЕУМЕТТАНУ ҒЫЛЫМНЫҢ НЕГІЗГІ ТАРИХИ ДАМУ КЕЗЕҢДЕРІ 36.79 KB
  ӘЛЕУМЕТТАНУ ҒЫЛЫМНЫҢ НЕГІЗГІ ТАРИХИ ДАМУ КЕЗЕҢДЕРІ Әлеуметтану қалай пайда болды оның алғы шарттары шығу себептері қандай оның ғылым болып қалыптасуына қандай қозғаушы күштер түрткі болды Бұл сұрақтарға бірден жауап беру емес оңай емес. Өйткені әлеу...
12337. Әлеуметтану ғылыми пән ретінде 592.5 KB
  І тақырып. Әлеуметтану ғылыми пән ретінде 1. Қоғам туралы түсінік. 2. Әлеуметтанудың объектісі мен пәні. 3. Әлеуметтанудың категориялары мен заңдары. 4. Әлеуметтанудың құрылымы мен қызметі. 5. Әлеуметтанудың басқа гуманита...