tjena, jag hade tänkt prova bygga upp ett GUI i Java. Funktionalliteten hade jag tänkt hämta från C++, är detta möjligt?!? om JA, hur? Hej! Jag skulle vilja göra tvärsom, dvs. Funktionalitet i Java men GUI i C++. Nån som vet hur jag gör det? Också en gammal öppen tråd. Det gick att göra funktionalitet i Java men GUI i C++. Kom aldrig så långt i det projektet att det behövdes men jag kollade först hur jag skulle få till ett snabbt GUI, samtidigt som jag använde Javas Sound API. Ehh, det här var ju inte alls min tråd. Var fick jag det ifrån?Java GUI med C++ funktion
/* Alltså d man ser vill jag prova göra i Java och d som händer i programmet vill jag skriva i C++ */Sv: Java GUI med C++ funktion
Du kan anropa C++ från Java genom att använda något som heter JNI.
Så här skall C++-funktionen se ut:
#include <windows.h>
#include "<jni.h>
JNIEXPORT void JNICALL Java_testingjni_pipa(JNIEnv *, jobject)
{
Beep(2000,20);
}
Vi kompilerar denna (I vc++) och skapar en DLL som vi döper till test.dll.
Så här ser Javan ut:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class testingjni extends JFrame implements ActionListener
{
public native void pipa();
testingjni()
{
getContentPane().setLayout(null);
JButton b=new JButton("pip");
b.addActionListener(this);
setBounds(0,0,500,500);
getContentPane().add(b);
b.setBounds(30,30,200,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
System.loadLibrary("test");
show();
}
public static void main(String s[])
{
new testingjni();
}
public void actionPerformed(ActionEvent e)
{
pipa();
}
}
mvh
Anders LindénSv: Java GUI med C++ funktion
/JörgenSv: Java GUI med C++ funktion
Kommer inte ihåg riktigt hur det var men jni.h hade structs och typedefs för javatyper. Där fanns nåt som hette jclass, och nåt som hette jobject. Via dessa typer kunde jag kalla på funktioner i javaklasser(statiska) och javaobjekt. Alltså gjorde jag en JNI-funktion i C++, ungefär så här:
#include <windows.h>
#include "<jni.h>
JNIEXPORT void JNICALL Java_SoundKlass_startGui(JNIEnv *env, jobject sound_object)
{
start_gui();
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID mid = (*env)->GetMethodID(env, cls, "playsound", "(Ljava/lang/String;)V");
(*env)->CallVoidMethod(env, obj, mid, "sound.wav");
}
I Java-koden körs startGui();
Det smartaste är att göra en likadan klass i C++ som har samma funktioner som Java-klassen. I C++-koden körs java-funktionerna. Sen kan man använda C++klassen i resten av sin kod.
/JörgenSv: Java GUI med C++ funktion
Hade för mig att jag har skrivit en tråd om ämnet. Men det kanske bara var inlägget i denna tråd. Ber om ursäkt, jag hoppas att min lösning på _mitt_ problem kan glädja nån iallafall.