首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JNIEnv->FindClass返回null OpenJDK 7,正确返回Oracle JDK 8

JNIEnv->FindClass返回null OpenJDK 7,正确返回Oracle JDK 8
EN

Stack Overflow用户
提问于 2015-08-23 02:28:09
回答 1查看 203关注 0票数 1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JavaVM *jvm;
JNIEnv *env;
LoadLibrary(TEXT("jvm.dll"));
JavaVMInitArgs vm_args;
vm_args.version=JNI_VERSION_1_6;
if (uri != NULL)
{
    vm_args.nOptions=l_paramlines;
}
else 
{
    vm_args.nOptions=l_paramlines-1;
}
vm_args.options=new JavaVMOption[vm_args.nOptions];
int index=0;
char* buffer;
if (uri != NULL)
{
    int bufferLen=512;
    buffer = new char[bufferLen];
    strcpy_s(buffer, bufferLen, "-Dcom.chives.configuri=");
    strcat_s(buffer, bufferLen, uri);
    vm_args.options[index++].optionString = buffer;
}
for (int i=0; i<l_paramlines-1; i++) vm_args.options[index++].optionString=paramlines[i];
vm_args.ignoreUnrecognized=false;
jint result=JNI_CreateJavaVM(&jvm, reinterpret_cast<void **>(&env), &vm_args);
if (result!=JNI_OK) return 0;
jclass cls=env->FindClass(paramlines[l_paramlines-1]);
if (cls!=NULL) {
    jmethodID mid=env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");
    jobjectArray args=env->NewObjectArray(1, env->FindClass("java/lang/String"), NULL);
    env->SetObjectArrayElement(args,0,env->NewStringUTF(game));
    env->CallStaticVoidMethod(cls, mid, args);
}

jvm->DestroyJavaVM();
return 0;

是我的代码,其中paramlinesl_paramlines 1被定义为" Clazz“,其中Clazz类中没有包声明。如果我使用Oracle7 jvm.dll,变量cls包含空结构,但如果我使用OracleJDK8 jvm.dll,变量cls将返回正确的初始化结构。

更有趣的是,如果我的JAR只包含类"Clazz",那么OpenJDK 7 jvm.dll工作得很好,但是如果我包含其他库(比如FasterXML Jackson/Log4j2),就会失败。我已经尝试在IntelliJ上使用Maven打包JAR,并在Eclipse上导出为Runnable JAR。两者都不能在OpenJDK 7 jvm.dll上运行。

我必须使用OpenJDK 7 jvm.dll,所以我想知道这是OpenJDK的错误,还是我的JAR包的错误。

我的META-INF在各种情况下: Eclipse Runnable JAR,在OpenJDK 7 jvm.dll上工作,只包含Clazz类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: Clazz
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

Eclipse Runnable JAR (提取的类),失败的OpenJDK 7,运行OracleJDK8,包含Clazz +库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Manifest-Version: 1.0
Class-Path: .
Main-Class: Clazz

Clazz Maven (提取的类),失败的OpenJDK 7,运行OracleJDK8,包含Clazz+库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Build-Jdk: 1.8.0_20
Main-Class: Clazz
Built-By: Chives
EN

回答 1

Stack Overflow用户

发布于 2015-12-30 01:57:28

当在Linux上使用JNIEnv 7 (1.7.0_91)构建,并在Windows上使用JAR文件时,JNIEnv->FindClass会按预期工作(正确地找到主类)。这似乎是Oracle JDK与OpenJDK之间的问题。

所以使用OpenJDK构建(并使用OpenJDK运行)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32162608

复制
相关文章
arch linux 安装
好长时间都没有更新自己的博客了,我简单翻阅了一下自己的更新记录,上一次更新好像还是在5月份左右,距今也有快半年,这半年也是遇到了很多事情,有不好的,也有好的。这半年我对在日常生活工作中使用Linux系统产生了一些兴趣,从零开始折腾这一系列的内容,主要从安装、配置、以及尝试各种软件来取代Windows的主导地位,也产生了一些心得,这里我想分几篇博客来聊聊我是如何慢慢使用arch Linux 来替代以前的Windows机器
Masimaro
2021/10/20
2.7K0
ARM 和 龙芯上 Arch Linux 安装手记
今天尝试安装龙芯版 Linux,本来希望能安装 Debian 版,但只找到一些文档(https://wiki.debian.org/LoongArch),没找到可安装版的 ISO。
杜金房
2024/03/26
5110
ARM 和 龙芯上 Arch Linux 安装手记
Arch Linux安装MariaDB
Archlinux上安装MySQL/MariaDB和其它发行版略有不同,因此这里梳理记录一下 执行常规安装 [mu@mu polls]$ sudo pacman -S mariadb #安装MariaDB [mu@mu polls]$ sudo systemctl enable mariadb #设置开机自启 Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/syste
用户1456517
2019/03/05
3.3K0
Arch Linux安装MariaDB
Arch Linux 安装指南
如果想要学习Linux,Arch Linux是个很好的选择。Arch Linux提供了非常详细并且更新及时的Wiki(帮助文档),使用系统的过程中遇到的问题基本上都空余从上面找到。
小陈运维
2021/10/13
2.6K0
如何在 Linux 上安装 Java
无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序,或者使用 Fedora 上的 DNF 或 Mac 上的 Brew 这样的软件包管理器进行安装,而有时你可能会从网站上下载可执行文件或安装程序。因为 Java 是这么多流行的应用程序的后端,所以最好了解安装它的不同方法。好消息是你有很多选择,本文涵盖了所有这些内容。
用户1880875
2021/09/22
3.1K0
如何在Linux上安装OpenCV
更新系统:在终端中输入 sudo apt-get update 和 sudo apt-get upgrade 以更新您的系统。
云帆沧海
2024/01/17
8710
Arch Linux安装与初体验
Arch Linux 是一个 x86-64 通用发行版,它流行于那些喜欢 DIY Linux 系统的用户和 Linux铁杆粉丝当中。其默认的安装文件只含有一个最基本的系统,它希望使用者自己配置并使用 Arch 系统。其基于 KISS 原则(使它保持简单、傻瓜Keep It Simple, Stupid!),Arch Linux 是一个专注于优雅、代码正确,精简而简洁的系统。
yuanfan2012
2021/02/25
2.7K0
Arch Linux安装与初体验
Arch Linux 安装初体验:EndeavourOS
最近在玩 LFS,看到一个老外使用 EndeavourOS 来玩耍!于是,我也来安装体验一把!
Lucifer三思而后行
2021/09/23
4.5K0
如何在 Fedora Linux 上安装 VLC
如果你刚刚安装了 Fedora,现在想在上面安装你最喜欢的视频播放器 VLC,你可能不会在软件中心找到它。至少不会立即找到。
用户1880875
2021/09/08
2.4K0
实战最精简的 linux -- arch linux 安装
安装操作系统已经越来越成为一件非常简单的事情了,几乎可以做到仅依靠鼠标一路点击,傻瓜式安装了,也许这让你不禁会去想,到底操作系统安装过程中做了哪些事情,亦或是你想要安装一个真正干净的系统,一切组件要什么不要什么都自己说了算,那么,arch linux 可能会是你一个不错的选择。 正是因为 arch 的高度定制与简洁,加上他的滚动升级机制以及庞大的社区 AUR,让他成为了越来越火热的 linux 发行版,本文,我们就来通过安装 arch 讲解一下 linux 的一些基本的命令行配置方法。
用户3147702
2022/06/27
7.5K0
实战最精简的 linux -- arch linux 安装
如何在Pacman (Arch Linux)中用Configuration设置HTTP?
首先,确定HTTP爬虫服务器的IP地址和端口。在这个例子中,我们将使用一个免费的HTTP爬虫服务器:getproxy。
华科云商小徐
2023/10/26
2310
VMware安装Arch Linux+Gnome桌面
官方下载地址:https://www.archlinux.org/download/。
Mculover666
2022/04/08
15.4K0
VMware安装Arch Linux+Gnome桌面
Linux 命令(161)—— adduser 命令
adduser 命令用于创建的新的系统用户。adduser 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。而可用 userdel 删除帐号。使用 adduser 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。
恋喵大鲤鱼
2022/10/30
1.7K0
如何在CentOS Linux 7.5上安装Nginx
Nginx发音引擎x是一个免费的开源高性能HTTP和反向代理服务器,负责处理互联网上一些最大的网站的负载。 本教程将教你如何在你的CentOS Linux 7.5机器上安装和管理Nginx。
星哥玩云
2022/07/13
1.6K0
如何在CentOS Linux 7.5上安装Nginx
如何在 Linux Mint 21 上安装 MongoDB
MongoDB 是一个非常流行的 NoSQL 数据库,可以在 Linux 和 Windows 操作系统上使用。它将数据存储在类似 JSON 的文档中,具有高度的灵活性和动态性,因此可用于创建强大的应用程序和网站,并使其与传统的关系数据库有根本的不同。
帝旭科技
2022/11/23
7.6K0
如何在 Linux Mint 21 上安装 MongoDB
如何在 Debian 10 Linux 上安装 Nginx
Nginx 是一个开源,高性能的 HTTP 和反向代理服务器,为 Internet 上的一些最大的站点提供支持。与 Apache 相比, Nginx 可以处理大量并发连接,并且每个连接的内存占用量更小。
星哥玩云
2022/07/28
2.8K0
如何在 Alma Linux 8 上安装 GitLab?
GitLab 是一款免费的开源 DevOps 软件,它附带多种工具,可在单个应用程序中开发、保护和操作软件。它提供免费的无限存储库和无限的协作者。它主要用于托管 Git 存储库,并具有其他与开发相关的功能,例如问题跟踪。它与 Github 和 Bitbucket 非常相似,允许个人和团队与他人远程共享代码。
网络技术联盟站
2022/04/07
1.4K0
如何在 Alma Linux 8 上安装 GitLab?
如何在 Debian 10 Linux 上安装MySQL
MySQL 是世界上最流行的开源关系数据库管理系统,而 MariaDB 是 Debian 10 中的默认数据库系统, Mysql 并不包含在 Debian 的默认软件存储库。
星哥玩云
2022/08/18
2.9K0
如何在 Debian 10 Linux 上安装MySQL
如何在Linux上安装Node.js
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/53039286
shaonbean
2019/05/26
2.4K0
如何在 Rocky Linux 8 上安装 Mattermost
Mattermost 是一个开源的、自托管的 Slack 替代方案,无需依赖第三方供应商,意味着您可以在自己的基础架构中托管数据。
网络技术联盟站
2021/11/19
1.3K0

相似问题

如何调整DBGrid - Delphi的行高

19

Delphi中DBGrid中的列高

11

更改DBGrid行的颜色

12

Delphi访问DBGrid的行

22

DBGrid,dbf合并2行

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文