1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
/**
\page tutorial-java-started Tutorial: First java application with ViSP
\tableofcontents
\section java_started_intro Introduction
We assume that you have already followed the previous tutorial \ref tutorial-install-java.
This tutorial will guide you through the creation of a simple Java console application using ViSP library in Eclipse.
\section java_started_create_project Create a new project
Open Eclipse and create a new Java project entering `"File > New > Java Project"` menu.
\image html img-tutorial-java-eclipse-create-new-project.jpeg
In the `"New Java Project"` dialog write the name of your project (let say `visp-java-started`). In JRE section, select the appropriate execution environment (JavaSE-17 if you install JDK 17, or JavaSE-15 if you install JDK 15 or JavaSE-11 if you install JDK 11). Then press `"Finish"` button.
\image html img-tutorial-java-eclipse-java-started.jpeg
In the "New module-info.java" dialog that may appear, press `"Don't Create"` button.
\image html img-tutorial-java-eclipse-dont-create.jpeg
\section java_started_user_lib Add a user library
If you followed \ref tutorial-install-java, you should already have ViSP library set in your workspace’s user libraries; if not please check out \ref tutorial-install-java. Now you should be ready to add ViSP library to your project.
- Inside Eclipse’s Package Explorer just right-click on your project’s folder and go to `"Build Path > Add Libraries..."`.
\image html img-tutorial-java-eclipse-add-libraries.jpeg
- Select `"User Library"` and click on `"Next"`:
\image html img-tutorial-java-eclipse-add-libraries2.jpeg
- Check the checkbox of the ViSP library and press `"Finish"` button. At this point, if you don't see `visp`, it means that you didn't follow the section \ref create_user_library.
\image html img-tutorial-java-eclipse-add-libraries3.jpeg
\section java_started_simple_app Create a simple application
To create a simple application that uses ViSP:
- First add a new class to your project by right-clicking on your project’s folder and entering `"New > Class"` menu.
\image html img-tutorial-java-eclipse-new-class.jpeg
- Then choose a class name like `Started` and press `"Finish"` button.
\image html img-tutorial-java-eclipse-new-class2.jpeg
Now we are ready to add the code of our first application in `Started.java` file. The code of the `Started` class is the following:
\include Started.java
- As you can see, at the beginning we import the main classes part of `core` module (VpCameraParameters, VpColVector, VpImageRGBa, VpImageUChar, VpMatrix and VpRGBa). Then we load `visp_java` library. After we continue defining the `main()` method that shows how to manipulate ViSP classes in Java.
- Now you should copy/paste the code in your `visp-java-started` project in `Started.java` file to have something similar to:
\image html img-tutorial-java-eclipse-started-code.jpeg
- You can now try to build and run this application entering`"Run > Run"` menu. You should have the following output:
\image html img-tutorial-java-eclipse-started-console.jpeg
\section java_started_issues Known issues
\subsection java_started_issue_jre Exception Unsupported Class Version Error
As shown in the next image, if you get the following issue on Ubuntu 18.04:
\verbatim
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/visp/core/VpMatrix has been compiled by a more recent version of the Java Runtime (class file version 57.0), this version of the Java Runtime only recognizes class file versions up to 55.0
\endverbatim
\image html img-tutorial-java-issue-jdk-version.jpg
it means probably that you use JRE System Library 11 installed in `/usr/lib/jvm/java-1.11.0-openjdk-amd64` while ViSP is build with a more recent java version obtained after downloading JDK 13 for example.
To fix this issue, as explained in \ref tutorial-install-java install JDK 11 and do a fresh ViSP build using java 11.
\subsection java_started_issue_vsp_version Exception Unsatisfied Link Error
As shown in the next image, if you experience the following exception after entering `"Run > Run"` menu:
\verbatim
Exception in thread "main" java.lang.UnsatisfiedLinkError: no visp_java321 in java.library.path: [/home/fspindle/visp-ws/visp-build/lib]
\endverbatim
\image html img-tutorial-java-issue-visp-version.jpg
- check that `visp-<version>.jar` is present in `$VISP_DIR/visp-build/bin`:
\verbatim
$ ls $VISP_DIR/visp-build/bin
visp-331.jar
\endverbatim
If this java archive is missing and if you follow \ref tutorial-install-java it means that JDK was not detected during CMake configuration or that you didn't build ViSP
- modify the following line to match ViSP version present in `$VISP_DIR/visp-build/bin`
\verbatim
System.loadLibrary("visp_java331");
\endverbatim
\subsection java_started_issue_mkl Error running Java app with Intel MKL
Running any Java app based on ViSP can lead to the following issue:
\verbatim
INTEL MKL ERROR: /opt/intel/compilers_and_libraries_2020.0.166/linux/mkl/lib/intel64_lin/libmkl_avx2.so: undefined symbol: mkl_sparse_optimize_bsr_trsm_i8.
Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
\endverbatim
There is no other satisfactory solution than to disable the use of Intel MKL 3rd party, configure and rebuilt ViSP libraries without MKL support.
To this end, in a terminal launch `ccmake ../visp` and set `USE_BLAS/LAPACK` option to an other value than `MKL`; it could be `OpenBLAS`, `Atlas`, `GSL`, `Netlib` or `OFF`. It is recommended to set this var to `OFF` only when there is no other Blas/Lapack 3rd party available.
A complete discussion about this issue is given here in [issue #806](https://github.com/lagadic/visp/issues/806).
\section java_started_next Next tutorial
You are now ready to continue with \ref tutorial-java-apriltag.
*/
|