线程" main"中的例外情况来自JAR的java.lang.NoClassDefFoundError

时间:2018-03-14 10:35:42

标签: java unix jar

我试图从shell文件中运行jar可执行文件。 我的罐子的路径:

/home/flussi/xmlEncoder/encoder.jar

但我总是得到这个错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: smaf.encoder.Encoder
   at java.lang.Class.initializeClass(libgcj.so.7rh)
Caused by: java.lang.ClassNotFoundException: java.nio.file.LinkOption not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:/home/flussi/xmlEncoder/encoder.jar], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.Class.initializeClass(libgcj.so.7rh)

shell命令

java -jar /home/flussi/xmlEncoder/encoder.jar

2 个答案:

答案 0 :(得分:1)

堆栈跟踪中有证据表明您正在尝试使用GCJ工具链来运行该JAR文件。 (以下评论中的证据证实了这一点。)

这是真正的问题。

不幸的是,GCJ的开发在完成对Java 1.5的支持之前就已停滞不前。看起来您正在尝试运行依赖于Java 1.7类(java.nio.file.LinkOption)的JAR文件

我的建议:

  • 卸载已安装的GCJ java包
  • 从软件包管理器安装OpenJDK Java 8(1.8)软件包或更高版本的 1 ,或者从Oracle站点下载并安装Java 8或更高版本的RPM。

如果您不管理机器,请让经理进行操作。或者尝试在其他地方运行JAR文件。

很可能需要对应用程序进行重大改写才能使其在GCJ上运行。这将是浪费精力,因为GCJ实际上是一个死Java平台。

1 - Java 7可行,但几年前就被EOL了。

答案 1 :(得分:0)

Hi运行java应用程序的最佳方法是首先设置CLASS_PATH和PATH变量。如果您当前的jar文件依赖于外部jar文件,那么您将面临很多问题。更好地设置您的路径变量,如下所示并运行应用程序: -

 #!/usr/bin/ksh
 export PATH=/usr/java/bin:$PATH
 # =/usr/java/bin is your java bin folder

 #set environment variable CP with all the jar libraries
 CP=/home/flussi/xmlEncoder/encoder.jar 
 CP=${CP}:/other/jar/somejar.jar

 java -Xmx256M -classpath "$CP" "com.myproj.Example"

com.myproj.Example encoder.jar您的public static void main内的java类文件已声明myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { if (request.getUrl().toString().startsWith("tel:")) { Intent intent = new Intent(Intent.ACTION_DIAL, request.getUrl()); view.getContext().startActivity(intent); } return super.shouldOverrideUrlLoading(view, request); } });