Binding Qt with java - java

How can I bind Qt with java by java java native interface?
I want to make an java app but for UI i want to use Qt, for some reason I can not use qt-jambi so I need to bind Qt with java.
Is it possible to create an Qt app in Qt creator and bind this component to java through java native interface?
If some one knows How qt-jambi works, please tell me, so help!
In fact my general question is that how (if its possible) to make a java app that some of its component like UI is written in c++? I do not want to use only one c++ method or library, I want to use I complete c++ qt app.
Thank you!
sorry for bad english.

When you want to have a hybrid Qt/Java application in which you use Qt API in Java code, definitely the best option is to use Qt Jambi. JNI only lets you to call some Java function from C++ world or vice-versa.
Qt Jambi enables you to to write software in Java in the speed of natively executable code and with native look and feel on different supported platforms. Actually it is a Java binding to Qt, so you can easily use Qt API in Java. There are some documentations on the web about it like this or that.

Related

Calling Java function from Qt C++

Is it possible to call java function from Qt Application and if so, how? Do I need to update java source for such task? I have Qt Desktop Opensource edition.
First of all think twice before calling java from C/C++. For Android it allow you call some API function of OS, but you pay with perfomance and some hard catching errors.
Qt designed pretty easy way for calling Java: package - androidextra
But if you need call it on desktop there is a way to avoid it: JNI(as Nejat says).
Here is simple example of using it:
http://www.codeproject.com/Articles/22881/How-to-Call-Java-Functions-from-C-Using-JNI

interface DLL with java application, how to?

I wrote a Java application for my company which works great. Now I am asked to interface my application with an API of a piece of hardware.
The API is implemented in a Windows dynamic link library (DLL). The samples that come with the API were written in Visual C++ 6.0
and Visual Basic 5.0 (seems very old).
There is no Java API available. I am wondering if there is a way to use the DLLs with my Java application I wrote? Should I rewrite the application
in VB.NET or... (Would these APIs even work with VB.NET)?
This is the piece of hardware whose API I need to use:
http://www.sealevel.com/store/8004e-pci-express-16-reed-relay-output-16-isolated-input-digital-interface-3-13v.html
Any suggestions or ideas are appreciated.
Thank you
The API should work with VB .NET.
If the API is Open-Source you could try to add JNI support, so that you can use it in Java.
Otherwise you could try to write the Application in C++. The difference to Java is not that big.
1) Use JNI, try using some java-c++ bridge which will make your life easy - see this https://code.google.com/p/javacpp/
2) Yes you can call native api's in vb.net

Is it possible to use lupdate (QtLinguist) in a java project?

I need to do the internationalization of an existing Java project. I am already using Qt Linguist in a C++ project using Qt and I would like (and have) to keep the same process for my Java project, instead of using the java RessourceBundles.
The help of lupdate specifies that it is possible to use Java files as input, but I have no idea of how to do this. Is it even possible ? Or is this purpose dead with Qt Jambi ?
Thanks,
Roland
Since the Jambi project is discontinued, you will probably not be able to use a current version of Qt Linguist with any Java project. Most features rely heavily on C++ specific language features (e.g. signatures of the translation methods, macros), so without a specific Java port it looks pretty bleak.
TLDR: Most likely: no. You will have use something different for translation (or write in C++ :) ).

Generating Java binding to a Qt based library

I'm writing a Qt based (QtCore) C++ library and would like to have access to it from Java and Python. Python is not a problem because of PySide and SIP. But I can't seem to find any information about doing the same with Java. The fact that Java bindings exist for Qt makes me hopefuly that there is a way to create bindings for a custom Qt based library.
Has anyone done this? Or have any information or pointers on how this can be done?
Qt Jambi included a generator that you could use on your own Qt classes.
However, Nokia discontinued support for Jambi after v4.5.
For technical details, see http://doc.qt.nokia.com/qtjambi-4.5.0_01/com/trolltech/qt/qtjambi-generator.html .
Also, there's an early white paper still at http://www.sra.co.jp/qt/relation/qtjambi-whitepaper-tp3.pdf with details of the generator in chapter 4.
http://www.swig.org/ has a program called swig. This program allows you to generate bindings
, which create functions in languages like Java or Python that simply call the appropriate C(++) function For example if you have a C++ function int add(int x, int y), running the prototype/definition through SWIG would create a Java wrapper that would call that function. Any libraries the C code uses are irrelevant.

Can you use Java libraries in a VB.net program?

I'm wondering if a Java library can be called from a VB.net application.
(A Google search turns up lots of shady answers, but nothing definitive)
No, you can't. Unless you are willing to use some "J#" libraries (which is not nearly the same as Java) or IKVM which is a Java implementation that runs on top of .NET, but as their documentation says:
IKVM.OpenJDK.ClassLibrary.dll: compiled version of the Java class libraries derived from the OpenJDK class library with some parts filled in with code from GNU Classpath and IcedTea, plus some additional IKVM.NET specific code.
So it's not the real deal.
I am author of jni4net, open source intraprocess bridge between JVM and CLR. It's build on top of JNI and PInvoke. No C/C++ code needed. I hope it will help you.
You can call Java from .NET if you wrap it in some form to make it accessable and the easiest way is typically to use a Runtime bridge like
http://www.jnbridge.com/
Other way is to wrap your API with java webservices.
check this also http://www.devx.com/interop/Article/19945
Nothing out of the box.
Most java/.net interop that I know uses web services.
If you can create COM components with Java, you can use tlbimp to create an interop assembly for using in VB.Net.
If can create standard DLLs that can be used from C++ with Java, you can write P/Invoke declarations and call them from VB.Net.
If you can create a web service with Java, you can generate proxy class from the WSDL and call it from VB.Net.
In any case, chances are the Java component will live in a separate process. I doubt you can load both the Java VM and the CLR in the same process.
If you have the source code and compile it using the J# compiler, then the answer is yes. If you want to call any pre-Java 2 (aka 1.2) libraries, then these are included pretty much verbatim with J#. More recent stuff is going to be tricky though (i.e., it's not there).
An example where this is used commercially are the yFiles graph layout algorithms from yWorks. These were originally just a Java library, but for the past few years they've been offering a .NET version, which is just the Java version compiled with Visual J#.
It's not without problems, and there are some limitations that you can't get around, but it can be done. So... unfortunately this answer looks pretty shady as well.
You could use JNI to instantiate a virtual machine and then use Java Classes. It will be some fun, though, because you would need to use C++ as a bridge between VB.Net and Java.
This article in java world has a quick tutorial on how to use Java from C++ and viceversa.
http://www.javaworld.com/javaworld/javatips/jw-javatip17.html
If you have the source, Visual Studio will let you convert Java code into c#.

Categories

Resources