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


 

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

42890. Дивідендна політика в банку та методи її реалізації 101.48 KB
  Дивідендна політика це сукупність заходів які здійснюються банком і спрямовані на прийняття рішень із нарахування та виплати дивідендів власникам акцій цього банку. Використання коштів на виплату дивідендів акціонерам перший із двох основних шляхів розподілу прибутку банку після оподаткування другим є спрямування коштів на інвестиції для подальшого розвитку банку що приводить до збільшення майбутніх грошових потоків. Перший підхід носить назву Теорія нарахування дивідендів за залишковим принципом . Іншими словами сума виплачених...
42891. Анализ финансового состояния ООО «Алексеевское» Горьковсвского района Омской области 170.8 KB
  Огромное значение в этом вопросе имеют такие понятия рыночной экономики как деловая активность платежеспособность и кредитоспособность предприятия порог рентабельности запас финансовой прочности запас безопасности степень риска эффект финансового рычага и др. В процессе снабженческой производственной сбытовой и финансовой деятельности происходит непрерывный процесс кругооборота капитала изменяется структура средств и источников их формирования потребность в финансовых ресурсах и как следствие финансовое состояние предприятия....
42892. Сестринский процесс при сахарном диабете 231.9 KB
  Сахарный диабет это группа метаболических обменных заболеваний характеризующихся гипергликемией которая является результатом дефектов секреции инсулина действия инсулина или обоих этих факторов. САХАРНЫЙ ДИАБЕТ Заболевание обусловленное абсолютной или относительной недостаточностью инсулина в организме и характеризующееся в связи с этим нарушением всех видов обмена веществ и в первую очередь обмена углеводов. Главной причиной развития...
42893. Дослідження цільових програм готельного обслуговування в Україна та світі 108.1 KB
  Ринок туристичних послуг провадиться описання характерних типів сегментованого ринку Любіцева О. Ринок туристичних послуг. Навчальний посібник âУніфіковані технології готельних послугâ знадобився авторові при виділенні сукупності факторів що впливають на комплексність надання послуг у готельних підприємствах Лук‘янова Л.
42894. Моделирование динамических систем 652.61 KB
  Модель несёт системообразующую и смыслообразующую роль в научном познании. На модели изучают неизвестные свойства предметов. Модель стремится как можно более ярко выразить структуру явления, его главные аспекты; является концентрированным выражением сущности предмета или процесса, выделяя только его основные черты.
42895. Информационная система Проверка выполнения плана отгрузки продукции заказчикам 3.92 MB
  В процессе договорной компании составляется договор на поставку товаров. Договор состоит из двух частей: общей части, включающей в себя реквизиты заказчика и поставщика, предмет поставки и т. д. , и спецификации, в которой приводятся подробные сведения о товарах и сроках поставки. На основе договоров составляется финансовый план и разрабатываются цеховые помесячные планы выпуска товарной продукции.
42896. Методы и способы измерения толщины окисных пленок, диффузионных и эпитаксиальных слоев, их физические основы 851 KB
  Совершенствование технологии производства полупроводниковых материалов и приборов связано с необходимостью повышения точности и экспрессности лабораторного и промышленного контроля их электрофизических параметров. От качественных характеристик измерительной техники зависит уровень технологических потерь на различных этапах производства.
42897. Совершенствование учетной политики для целей налогообложения на примере ООО «Апекс» 144.45 KB
  Роль и значение налогового учета на предприятии 1.1 Понятие налогового учета цели задачи.2001 №110ФЗ 25 глава НК произошло законодательное закрепление ведения налогового учета. Налоговый учет доходов и расходов для целей исчисления налога на прибыль отделен от бухгалтерского учета и становится самостоятельным направлением учета фактов хозяйственной жизни организаций.