Java 无法运行Shell脚本来启动Jar

Java 无法运行Shell脚本来启动Jar,java,shell,batch-file,Java,Shell,Batch File,我有一个windows批处理脚本,它启动一个jar,启动一个完全用Java编写的游戏(它是一个runescape客户端)。它应该会起作用 原始批次(WIN): 我为操作系统制作的Shell文件: #!/bin/sh echo Your client is loading... echo -------------------- java -Xmx1000m -cp Theme.jar Gui 0 0 highmem members 32 终端中的错误: Your Client is loadi

我有一个windows批处理脚本,它启动一个jar,启动一个完全用Java编写的游戏(它是一个runescape客户端)。它应该会起作用

原始批次(WIN):

我为操作系统制作的Shell文件:

#!/bin/sh
echo Your client is loading...
echo --------------------
java -Xmx1000m -cp Theme.jar Gui 0 0 highmem members 32
终端中的错误:

Your Client is loading...
--------------------
Exception in thread "main" java.lang.NoClassDefFoundError: Gui
Caused by: java.lang.ClassNotFoundException: Gui
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
我如何修复它或制作一个与批处理完全相同并实际运行的shell脚本

java.lang.ClassNotFoundException

我认为可能有两个原因:

  • 运行java程序时包含的jar文件不包含在为shell脚本创建的jar文件中

  • 在创建jar文件时,尚未在manifest.mf文件中定义主类

  • 试着用这个

    java -Xmx1000m -cp .: Theme.jar Gui 0 0 highmem members 32
    

    as':'是Unix环境的类路径分隔符,而“;”用于Windows。

    您没有正确转换shell脚本。在Windows版本中,
    -cp
    参数为
    。;因此在Linux中它应该是
    :Theme.jar
    ,路径分隔符
    替换为
    ,如下所示:

    java -Xmx1000m -cp .:Theme.jar Gui 0 0 highmem members 32
    
    ClassNotFoundException
    通常表示类路径有问题。(参数
    -cp
    -classpath
    的快捷方式)


    根据Windows脚本判断,
    Gui
    是一个类名,其余是传递给
    Gui
    类的命令行参数。错误消息告诉您它找不到
    Gui
    类。它必须位于当前目录或
    主题.jar
    中。如果它们中没有任何一个,那么这就无法工作。

    为什么要将当前文件夹包括到批处理中的类路径中,而不包括在shell脚本中?我说的是
    -cp。;Theme.jar
    在批处理中,但是shell文件中有
    -cp-Theme.jar
    。如果我这样做了,我会遇到这个错误(太长了,无法发布)。请尝试在。:和Theme.jar之间不留空格,我的意思是尝试使用。:Theme。jar@Nicco可能是因为在
    之后出现了意外的空格字符。确保
    :Theme.jar
    中没有空格。是的,我确实删除了:(仍然不工作,并且出现了原始错误。这是古怪的windows执行此操作
    java-verbose-Xmx1000m-cp Theme.jar Gui 0 0 highmem mem members 32
    这将打印正在加载的所有类和src类(如果文件不在jars中)或者jar文件名。可能您没有将某些内容从windows复制到linux/iOs。也可以在linux中的dir上运行chmod 777*,以便所有用户都可以加载所有文件。试试这个,java-Xmx1000m-cp-Theme.jar:./Gui 0 0 highmem成员32@Nicco在您运行此程序的目录中是否有
    Gui.class
    文件?或者如果您有
    jar tf Theme.jar | grep Gui.class
    你得到了什么?Gui 0 0 highmem成员32不是变量吗?我没有编写原始批处理,我只知道它在Windows上工作。我应该如何包含你的解决方案?@Nicco根据Windows脚本判断,Gui是一个类名,其余是传递给
    Gui
    类的命令行参数。错误消息告诉你它找不到
    Gui
    类。它必须在当前目录或
    theme.jar
    中。如果它不在任何目录中,则无法工作。你在我之前的评论中没有回答我的问题。我得到了这个btw pastie.org/8918043它只有一半是由于复制limits@Nicco这不可能是我要求的结果epeat:在您运行这个程序的目录中是否有一个
    Gui.class
    文件?或者如果您有
    jar tf Theme.jar | grep Gui.class
    您得到了什么?
    java -Xmx1000m -cp .:Theme.jar Gui 0 0 highmem members 32