有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从C++调用java的BooToCassPATS/P

<>我试图在C++命令行上编程地启动一个java应用程序。在我尝试使用“Xbootclasspath/p:”开关向目标应用程序类路径预先添加一些JAR之前,一切都正常。当我这样做时,Java虚拟机无法启动并生成一个Java虚拟机。lang.NoClassDefFoundError

当我从C++程序中打印出Xbootclasspath字符串时,奇怪的是(使用CUT & lt;& lt;然后手动复制并粘贴到命令行中,一切按预期运行。我只是想知道C++“系统”命令是否在执行之前可能以某种方式隐含地修改字符串?下面是我用java C++代码启动Java应用程序:

string  generateBootClassPath(){


string bootClassPath = "-Xbootclasspath/p:" + getHomePath() + "\\HyperSpaceClient\\Boot\\BootCompanion.jar;Scale_HyperSpaceClient_DUI\\dist\\Scale_HyperSpaceClient_DUI.jar ";

return bootClassPath;

}

注意:上面的“getHomePath”函数只返回当前用户的主目录,即 用作始终存储目标“bootcompany.jar”的前缀。

然后是主要功能。。 在这里,我只是连接要加载的java应用程序(作为参数传递给 主方法)使用我在上面生成的bootclasspath字符串。然后调用标准C++系统() 函数将字符串传递到命令行并执行它

int main(int argc, char* argv[])

{

string fullStartUpString = java +  generateBootClassPath() + argv[1];

system(fullStartUpString.c_str());

}

都是很标准的东西,不知道为什么它不能按预期工作


共 (1) 个答案

  1. # 1 楼答案

    经过几个小时的测试和调试,我成功地解决了我之前发布的代码示例中的问题;我希望有人能在这一点上为我所遇到的问题和我分享一些细节:

    发布代码的主要问题是双引号字符(即“)这一点在整个发布的代码示例中被广泛使用,实际上被C++编译器视为一个特殊字符,因此,在所有的情况下,当它被作为字符串文本值的一部分使用时,它将最终被传递给“Stand()”命令。p>

    澄清:系统(“你好,世界!”);应该写为:系统(“Hello World”)

    请注意每个双引号字符前面的“\”转义字符。一旦我对代码样本的相关部分进行了修改,它就如预期的那样工作了