ich versuche grade Winamp aus nem Java Programm raus zu steuern. Natürlich braucht man dazu dann das jni, und hier hab ich einige probleme....
Ich poste mal meinen Code:
package mybrary;
public class WinampHelper
{
static {
// Loads the header
System.loadLibrary("WinampHelper");
}
public native void printTrackInfo();
public WinampHelper() {
printTrackInfo();
}
}
die methode in c++ (nicht von mir, hab ich ausm netz...):
JNIEXPORT void JNICALL
Java_WinampHelper_printTrackInfo (JNIEnv *env, jobject obj)
{
char *returnVal;
int length;
returnVal = (char *)malloc(MAX_PATH*sizeof(char));
hwndWinamp = FindWindowA("Winamp v1.x",NULL);
if(hwndWinamp == NULL)
{
printf("Winamp not running.\n");
}
else
{
ReadWinampToLocal((char *)SendMessage(hwndWinamp, WM_WA_IPC, GetPlayingTrack(), IPC_GETPLAYLISTFILE), returnVal, MAX_PATH);
printf("\nCurrently Playing song: %s\n\n", returnVal);
printf("Artist: %s\n", GetMetaInfo("Artist", returnVal));
printf("Title: %s\n", GetMetaInfo("Title", returnVal));
printf("Album: %s\n", GetMetaInfo("Album", returnVal));
printf("Year: %s\n", GetMetaInfo("Year", returnVal));
printf("Bitrate: %s kbps\n", GetMetaInfo("Bitrate", returnVal));
// in milliseconds
length = atoi(GetMetaInfo("Length", returnVal));
printf("Length: %d:%02d\n", length/(1000*60), (length/1000)%60);
free(returnVal);
}
}
die header Datei:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class WinampHelper */
#ifndef _Included_WinampHelper
#define _Included_WinampHelper
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: WinampHelper
* Method: printTrackInfo
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_WinampHelper_printTrackInfo
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
wenn ich das dann kompiliere und ausführen will, bekomm ich immer fogende Exception:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: mybrary.WinampHelper.printTrackInfo()V
at mybrary.WinampHelper.printTrackInfo(Native Method)
at mybrary.WinampHelper.<init>(WinampHelper.java:13)
at mybrary.main$2.actionPerformed(main.java:143)
at javax.swing.AbstractButton.fireActionPerformed(Unk
nown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed
(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
Hoffe mal mir kann jemand dabei helfen.
Danke schon mal im Voraus.
Edit: Hab den Fehler gefunden. Hatte den packagename nicht im Methodennamen drin stehen. Funktioniert jetz fürs erste :-)
Gruß,
markus
Dieser Beitrag wurde von m4rkus bearbeitet: 24. Mai 2008 - 09:12

Hilfe
Neues Thema
Antworten

Nach oben

