Ниже приводится мое использование инструмента JNI in go, чтобы вызвать пакет Java Jar, ниже приведены программы кода Java и GO, а также ошибку времени выполнения.package com.example.demo;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.digest.HMac;
public class MyTest {
public static String test(String secretKey){
HMac mac = SecureUtil.hmacSha256(secretKey);
String digestHex = mac.digestHex("spliceValue", CharsetUtil.CHARSET_UTF_8);
String signature = digestHex.toUpperCase();
return signature;
}
}
< /code>
Go Code: < /p>
package main
/*
#include
*/
import "C"
import (
"fmt"
"github.com/timob/jnigi"
"log"
"runtime"
)
func main() {
fmt.Println("load JVM...")
jvmPath := jnigi.AttemptToFindJVMLibPath()
fmt.Printf("JVM path: %s\n", jvmPath)
if err := jnigi.LoadJVMLib(jvmPath); err != nil {
log.Fatal("JVM load err:", err)
}
fmt.Println("JVM load success!")
runtime.LockOSThread()
defer runtime.UnlockOSThread()
classpath := "/test/app/engine-test/demo.jar:/test/app/engine-test/hutool-all-5.8.25.jar:/test/app/engine-test/bcprov-jdk18on-1.78.jar"
fmt.Printf("Classpath: %s\n", classpath)
jvmArgs := jnigi.NewJVMInitArgs(false, false, jnigi.DEFAULT_VERSION,
[]string{
"-Djava.class.path=" + classpath,
"-Xmx512m",
"-Xms256m",
})
jvm, env, err := jnigi.CreateJVM(jvmArgs)
if err != nil {
log.Fatal("err:", err)
}
fmt.Println("JVM success!")
defer jvm.Destroy()
secretKey := "mySecretKey123"
secretKeyParam, err := env.NewObject("java/lang/String", []byte(secretKey))
if err != nil {
log.Fatal("secretKe err:", err)
}
class, err := env.FindClass("com/example/demo/MyTest")
if err != nil {
fmt.Printf(" ------FindClass: %v\n", err)
}
var tt jnigi.ObjectRef
err = class.CallMethod(env, "test", &tt, secretKeyParam)
if err != nil {
fmt.Printf(" ------class.CallMethod: %v\n", err)
}
var goString string
if err := tt.CallMethod(env, "toString", &goString); err != nil {
fmt.Printf(" ewrr: %v\n", err)
} else {
fmt.Printf(" return: %s\n", goString)
}
}
< /code>
Запустите эту демонстрацию : < /p>
f205b1f5592f:/test/app/engine-test# ./main
load JVM...
JVM path: /opt/java/openjdk/lib/server/libjvm.so
JVM load success!
Classpath: /test/app/engine-test/demo.jar:/test/app/engine-test/hutool-all-5.8.25.jar:/test/app/engine-test/bcprov-jdk18on-1.78.jar
JVM success!
Exception in thread "main" java.lang.NoSuchMethodError: test
------class.CallMethod: Java exception occurred. check stderr/logcat
ewrr: JNIGI: unknown type *string (value = 0xc000014060)
Подробнее здесь: https://stackoverflow.com/questions/797 ... ar-package
Язык GO использует JNI для вызова функций в пакете JAVA Code Code ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1758539638
Anonymous
Ниже приводится мое использование инструмента JNI in go, чтобы вызвать пакет Java Jar, ниже приведены программы кода Java и GO, а также ошибку времени выполнения.package com.example.demo;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.digest.HMac;
public class MyTest {
public static String test(String secretKey){
HMac mac = SecureUtil.hmacSha256(secretKey);
String digestHex = mac.digestHex("spliceValue", CharsetUtil.CHARSET_UTF_8);
String signature = digestHex.toUpperCase();
return signature;
}
}
< /code>
Go Code: < /p>
package main
/*
#include
*/
import "C"
import (
"fmt"
"github.com/timob/jnigi"
"log"
"runtime"
)
func main() {
fmt.Println("load JVM...")
jvmPath := jnigi.AttemptToFindJVMLibPath()
fmt.Printf("JVM path: %s\n", jvmPath)
if err := jnigi.LoadJVMLib(jvmPath); err != nil {
log.Fatal("JVM load err:", err)
}
fmt.Println("JVM load success!")
runtime.LockOSThread()
defer runtime.UnlockOSThread()
classpath := "/test/app/engine-test/demo.jar:/test/app/engine-test/hutool-all-5.8.25.jar:/test/app/engine-test/bcprov-jdk18on-1.78.jar"
fmt.Printf("Classpath: %s\n", classpath)
jvmArgs := jnigi.NewJVMInitArgs(false, false, jnigi.DEFAULT_VERSION,
[]string{
"-Djava.class.path=" + classpath,
"-Xmx512m",
"-Xms256m",
})
jvm, env, err := jnigi.CreateJVM(jvmArgs)
if err != nil {
log.Fatal("err:", err)
}
fmt.Println("JVM success!")
defer jvm.Destroy()
secretKey := "mySecretKey123"
secretKeyParam, err := env.NewObject("java/lang/String", []byte(secretKey))
if err != nil {
log.Fatal("secretKe err:", err)
}
class, err := env.FindClass("com/example/demo/MyTest")
if err != nil {
fmt.Printf(" ------FindClass: %v\n", err)
}
var tt jnigi.ObjectRef
err = class.CallMethod(env, "test", &tt, secretKeyParam)
if err != nil {
fmt.Printf(" ------class.CallMethod: %v\n", err)
}
var goString string
if err := tt.CallMethod(env, "toString", &goString); err != nil {
fmt.Printf(" ewrr: %v\n", err)
} else {
fmt.Printf(" return: %s\n", goString)
}
}
< /code>
Запустите эту демонстрацию : < /p>
f205b1f5592f:/test/app/engine-test# ./main
load JVM...
JVM path: /opt/java/openjdk/lib/server/libjvm.so
JVM load success!
Classpath: /test/app/engine-test/demo.jar:/test/app/engine-test/hutool-all-5.8.25.jar:/test/app/engine-test/bcprov-jdk18on-1.78.jar
JVM success!
Exception in thread "main" java.lang.NoSuchMethodError: test
------class.CallMethod: Java exception occurred. check stderr/logcat
ewrr: JNIGI: unknown type *string (value = 0xc000014060)
Подробнее здесь: [url]https://stackoverflow.com/questions/79771502/the-go-language-uses-jni-to-call-functions-in-the-java-codes-jar-package[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия