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


 

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

4802. Управление активами и пассивами 108.5 KB
  Управление активами и пассивами Сущность и подходы к управлению активами и пассивами в коммерческом банке Типы управления активами и пассивами. Процесс управления активами и пассивами Вопрос 1. Сущность, цели и методы управления активами...
4803. Структурная схема системы связи, предназначенной для передачи данных и передачи аналоговых сигналов методом ИКМ 269 KB
  Разработать структурную схему системы связи, предназначенной для передачи данных и передачи аналоговых сигналов методом ИКМ для заданного вида модуляции и способа приема сигналов. Рассчитать основные параметры системы связи. Указать и обосновать пут...
4804. Технические средства автоматизации и управления 1.77 MB
  Классификация, типовое обеспечение и интеграция современных автоматизированных систем управления Классификация автоматизированных систем управления АСУ ТП – автоматизированная система управления технологическим процессом, представляюща...
4805. Управление инновационной деятельностью предприятия 79.5 KB
  Управление инновационной деятельностью предприятия Тема включает два раздела: Содержание инновационного менеджмента. Организационные формы инновационного менеджмента. Содержание инновационного менеджмента Вопросы: Содержание инновационной де...
4806. Теории мотивации в современном управлении 65.22 KB
  Теории мотивации в современном управлении Введение Человека побуждает к активным действиям необходимость удовлетворения различных потребностей. Демокрит рассматривал потребность как основную движущую силу, которая сделала ум человека изощренным, поз...
4807. Проблемы и перспективы правового обеспечения страхования жизни в Украине 73 KB
  Данный реферат посвящен теме правовое обеспечение страхования в Украине. Данная тема является актуальной, поскольку правовое обеспечение страхования Украины необходимо знать каждому гражданину, так это непосредственно касается каждого. Прав...
4808. Токарный станок. Обработка наружных конических поверхностей заготовок 51.5 KB
  Токарный станок Токарный станок предназначен для обработки преимущественно тел вращения путём снятия с них стружки при точении. Так сказать — это один из древнейших станков, на основе которого создавались станки сверлильной, расточной и др. гру...
4809. Проектирование технологических котлетоформовочных машин 258 KB
  Котлетоформовочная машина: Диаметр бункера D=0,265 м Max=0,130 м, Min=0,035 м (расстояние от оси вращения до рабочих точек лопасти) Частота вращения формовочного стола n1=0,2 с-1 Частота вращения лопасти n=0,60 с-1 Диаметр фо...
4810. Боевые искусства древней Греции 93.5 KB
  Введение Единоборство в широком смысле (т.е. в том, который выходит за рамки понятий честной схватке один на один) является неким способом, позволяющим уцелеть в бою, достигнуть поставленных целей – по обороне или нападению. Боевое искусство ...