/**

\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.

*/
