java.线程池 线程数_如何在线程“ main”中修复异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory...

java.线程池 线程数

此错误表示您的代码或您在应用程序中使用的任何外部库都在使用SLF4J库 (一个开放源代码日志记录库),但无法找到所需的JAR文件,例如slf4j-api-1.7.2.jar因此它是在线程“ main” java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 。 如果您查看错误,将会看到它无法找到类org/slf4j/LoggerFactoryrg.slf4j.LoggerFactory 。 软件包名称指示它是SLF4j的一部分,因此您需要在应用程序的类路径中使用SLF4j JAR文件,例如slf4j-api-1.7.2.jar。 因此,继续从SLFj网站或Maven Central存储库下载JAR文件,然后重新启动应用程序。

顺便说一句,SLF4j并不是真正的日志API,但是它提供了对其他日志库(例如Log4j ,java.util.logging或LogBak)的抽象。 它与commons-logging库类似,但是由于设计更好,因此在复杂的环境中不会混乱。

通过使用SLF4j,您可以切换到任何日志记录库,而无需更改应用程序中的单行代码,例如,从java.util.logging or LogBack切换到Log4j。

因此,除了SLF4j二进制文件外,如果使用LogBack库,您还需要适当的日志记录二进制文件,例如log4j-1.2.16.jarlogback-1.2.3.jar 。 这些是SLF4j将调用它们进行实际工作的库。

有时,当您的代码不是真正使用SLF4j,而是使用内部使用它的工具或库时,会出现此错误。

例如,我正在使用log4jdbc.jar ,该工具在运行JDBC代码时记录SQL语句及其计时,它给了我这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at net.sf.log4jdbc.Slf4jSpyLogDelegator.<init>(Slf4jSpyLogDelegator.java:45)
at net.sf.log4jdbc.SpyLogFactory.<clinit>(SpyLogFactory.java:37)
at net.sf.log4jdbc.DriverSpy.<clinit>(DriverSpy.java:106)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at Testing.main(Testing.java:15)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more

由于我的程序很简单,而且我实际上并没有使用任何Logging API,所以我对出现此错误的地方感到惊讶,但是,快速查看一下堆栈跟踪显示它
net.sf.log4jdbc.DriverSpy类,它使用SLF4j进行日志记录 。

稍后,当我阅读log4jdbc的文档时,我意识到我们需要SLF4J和Log4J JAR文件才能使其正常工作。 由于我在Eclipse中运行测试程序,因此对我来说很容易,因此我将slf4j-api-1.7.2.jarlog4j-1.2.16.jar放到了项目目录中。 由于它包含在classpath中,因此很容易被拾取。

顺便说一句,对于许多Java程序员来说, 类路径问题不容易解决,因为他们不知道将这个JAR文件确切地放在哪里来解决他们的问题。 由于每种应用程序的设置都不相同,因此我将尝试介绍一些方案来解决此错误。

1.如果您正在使用批处理脚本或Shell脚本运行Java程序,请查找-cp或-classpath选项,并查看它在哪里选择JAR文件。 您可以将slf4j-api-1.7.2.jarlog4j-1.2.16.jar放在这些目录中。

如果您的程序在Linux服务器上运行,则只需执行ps -ef | grep java并查看Java程序的JVM参数以查找类路径中的目录。 如果您有权访问脚本,则还可以将新目录添加到类路径。

$ ps -ef | grep java/opt/jre/v1.7.0_80-64bit/bin/java -Xmx8192M -Xms8192M -classpath /app/myapp.jar:/app/jackson.jar MyApplication

2.如果您的程序使用的是CLASSPATH环境变量,则只需回显$CLASSPATH并将slf4j-API-1.7.2.jarlog4j-1.2.16.jar文件放入CLASSPATH中已经存在的目录中,或者只需将新目录添加到CLASSPATH中即可。 请参阅本文,以了解如何在CLASSPATH环境变量中进行更改 。

3.如果使用的是Eclipse,则只需将slf4j-API-1.7.2.jarlog4j-1.2.16.jar放到您的项目目录中。 默认情况下,它在类路径中,因此您的应用程序将提取JAR。

您可以从相应的网站(例如https://www.slf4j.org和https://logging.apache.org/log4j/1.2/download)下载slf4j-api-1.7.2.jar和log4j-1.2.16.jar。 .html或仅从Maven Central存储库下载它们。

如果使用Maven构建项目和管理依赖项,则还可以添加以下Maven依赖项,以将SLF4J和Log4j JAR文件下载到项目中:

<!-- SLF4J API --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.2</version></dependency><!-- LOG4J --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.2.16</version></dependency>

添加这些依赖项后,请确保从Maven进行了干净的构建,以从Maven的远程存储库中实际下载这些依赖项。

这就是如何解决线程“ main”中的异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory错误 。 您需要做的就是将slf4j-API-1.7.2.jar和log4j-1.2.16.jar文件添加到类路径中。

根据具体情况,版本可能有所不同,但是您必须添加兼容版本的SLF4J和正在使用的日志记录库。 例如,如果您的应用程序正在使用LogBack,则需要添加logback.jar文件的相关版本。

如果使用Maven,还可以通过在pom.xml中添加相关的依赖项来下载这些JAR文件,否则,您可以直接从Maven Central或直接从SLF4j和Log4j网站下载JAR文件并添加到应用程序的类路径中。

如果您发现将SLF4J和LOG4j JAR文件添加到类路径中遇到任何麻烦,也可以在注释部分告诉我们,我们会尽力帮助您。

感谢您阅读本教程,如果您喜欢本教程,请与您的朋友和同事分享。 如果您有任何问题或建议,请发表评论。

翻译自: https://www.javacodegeeks.com/2018/02/fix-exception-thread-main-java-lang-noclassdeffounderror-org-slf4j-loggerfactory-java.html

java.线程池 线程数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式实战---爬取多张图片

主要是分析网站图片的html源代码&#xff0c;来决定正则表达式如何写。 完整代码 #使用正则表达式爬取多张图片,亮点在于数据解析 #爬取网站&#xff1a;https://www.bilibili.com/read/cv11323037?fromsearch import requests import re import os image_pathimage if not …

JS(JavaScript) 使用捕获性分组处理文本模板,最终生成完整字符串

var tmp "An ${a} a ${b} keeps the ${c} away";// obj 是 json 对象 var obj {a:"apple",b:"day",c:"doctor" };/** *descript 声明定义一个函数 tmpl&#xff0c;该函数将文本模板对应的变量替换后返回 * */function tmpl(t,o){/*…

6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...

因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题&#xff0c;2005年&#xff0c;Stephen Colebourne创建了Joda-Time库&#xff0c;作为替代的日期和时间API。Stephen向JCP提交了一个规范&#xff0c;他本人作为规范的领导人&#xff0c;该规范就是JSR 310&am…

第一个JDK 10(18.3)候选版本(内部版本43)展示了新的版本控制方案

Mark Reinhold的帖子“ JDK 10&#xff1a;First Release Candidate ”宣布“在build 43中没有未解决的P1错误”&#xff0c;并将Build 43命名为最初的JDK 10 Release Candidate 。 Reinhold帖子还指向“ JDK 10 Early Access Builds ”页面&#xff0c;该页面包含发行说明的链…

安装Pytorch如何选择CUDA的版本

安装Pytorch时CUDA的选择Nvidia CUDA查看CUDA版本方法查看CUDA的驱动API版本查看CUDA的运行API版本查看官方CUDA的运行API版本方法1方法2查看Anaconda里cudatoolkit包版本CUDA是一个并行计算平台和编程模型&#xff0c;能够使得使用GPU进行通用计算变得简单和优雅。Nvidia官方提…

MySQL的通配符

% 表示匹配任意数量&#xff08;包含 0 个&#xff09;的任意字符&#xff0c;跟 like 配合使用_ 下划线表示匹配任意 1 字符

db2 springboot 整合_[SpringBoot]快速配置多数据源(整合MyBatis)

前言由于业务需求&#xff0c;需要同时在SpringBoot中配置两套数据源(连接两个数据库)&#xff0c;要求能做到service层在调用各数据库表的mapper时能够自动切换数据源&#xff0c;也就是mapper自动访问正确的数据库。本文内容&#xff1a;在SpringbootMybatis项目的基础上&…

pytorch使用GPU炼丹笔记

如何使用GPU训练/测试模型使用单GPU设置设备将数据转换成CUDA张量将模型参数转换成CUDA张量使用指定GPU1.使用CUDA_VISIBLE_DEVICES。1.1 直接在终端或shell脚本中设定&#xff1a;1.2 python代码中设定&#xff1a;2. 使用函数 set_device使用多GPUDP方法DDP方法需要先初始化数…

java解决错误经验_在Java错误进入生产之前的新处理方式

java解决错误经验我们如何认识到解决预生产错误的旧方法还不够&#xff0c;以及我们如何能够改变它 第一次尝试就没有完美的代码&#xff0c;我们所有人都可以证明我们已经通过艰苦的努力学习了。 不管我们使用多少测试周期&#xff0c;代码审查或工具&#xff0c;总有至少一个…

vim 寄存器中的 ^@,^M,^J

首先&#xff0c;ASCII 码表示的字符不都是可打印字符&#xff08;可显示字符&#xff09;&#xff0c;意味着&#xff0c;其中的控制字符本不是对应某个字形的&#xff0c;所以本没有办法看到他们。那么如果万一某个文件中出现了这些怎么办捏&#xff1f;&#xff1f;这里我们…

2019怎么保存低版本_CAD发给客户没字体怎么办?快速打包外部参照、字体、打印样式...

CAD发给客户没字体怎么办&#xff1f;快速打包DWG外部参照、字体、图片、打印样式&#xff01;有没有遇见过这样的情况&#xff1a;图纸发给客户&#xff0c;外部参照的文件没有一起打包发出去&#xff0c;被老板和客户臭骂一顿。图纸发给审图&#xff0c;没有字体&#xff0c;…

Python正则表达式笔记

正则表达式作用函数函数参数查找函数re.findall()re.search()re.match()re.finditer()re.compile()函数替换函数re.sub(pattern,repl,string,count0,flags0)re.subn()分割函数re.split()模式串字符字符类别表达(匹配单个字符)\d\D\s\S\w\W[a-z][^a-z].多次匹配字符*&#xff1f…

CentOS Linux 下的 vim 无法使用系统剪贴板,怎么解决呢?

文章目录查看系统当前的 vim 是否支持剪贴板安装 gvim 来支持系统剪贴板gvim 和 vim 的区别SSH 连接远程主机遇到的问题查看系统当前的 vim 是否支持剪贴板 首先查看下系统的 vim 是否支持系统剪贴板&#xff0c;在命令终端输入如下命令&#xff1a; [roothtlwk0001host test…

jwt令牌_jwt-cli:用于解码JSON Web令牌(JWT令牌)的Shell库

jwt令牌当我开始经常需要解码JSON Web令牌时&#xff0c;我感到迫切需要编写允许我快速进行操作的程序。 有很多不错的选项&#xff0c;例如jwt.io &#xff0c;但是一旦您需要执行此操作&#xff0c;它通常就会变得笨拙。 并且&#xff0c;如果您需要处理多个令牌或进一步处理…

日历对象导哪个包_java.util的的Date类和Calendar类

Datejava.util.Date类的对象用来表示时间和日期&#xff0c;用得最多的是获取系统当前日期和时间&#xff0c;精确到毫秒。Java中有两个Date类&#xff0c;还有一个是java.sql.Date&#xff0c;这个类一般不用&#xff0c;即使在数据库中也不推荐使用。写代码时注意导入的包一定…

Debian Linux 的 vim 如何使用系统剪贴板

以 ubuntu 为例&#xff0c;ubuntu 默认是没有 vim 的&#xff0c;需要自己安装一下&#xff1a; 更新源&#xff1a; apt-get update安装 vim &#xff1a; apt-get install vim此时&#xff0c;系统不支持剪切板&#xff0c;我们使用命令 vim --version|grep clipboard 查…

Python中replace()函数

replace()函数 功能&#xff1a;类似正则表达式的sub()函数&#xff0c;使用新的字符串替换主串中的内容。 函数需要通过字符串来调用,replace(old, new, max)函数参数依次为&#xff1a; old表示主串中要被替换的字符串。new表示新的字符串。max表示替换次数&#xff0c;默…

lombok和maven_Lombok,AutoValue和Immutables,或如何编写更少,更好的代码返回

lombok和maven在上一篇有关Lombok库的文章中 &#xff0c;我描述了一个库&#xff0c;该库有助于处理Java中的样板代码&#xff08; 是的&#xff0c;我知道这些问题已经在Kotlin中解决了 &#xff0c;但这是现实生活&#xff0c;我们不能一味地坐下来&#xff0c;一旦出现较新…

上传文件显示进度条_文件上传带进度条进阶-断点续传

说明 1. 把文件按大小1M分割成N份 2. 每次上传时&#xff0c;告诉后台大文件的md5、当前第几份&#xff08;从0开始&#xff09;、总共几份 3. 并行上传&#xff0c;前端同时开启5个请求进行传输增加速度 4. 上传失败或出错后&#xff0c;继续上传下一份&#xff0c;把出错的份…

Unix 下的 vim 如何使用系统剪贴板

在 Unix 环境下&#xff0c;" 寄存器需要 xterm-clipboard feature 的 VIM 软件才能使用&#xff0c;具有这个 feature 的 VIM 可以安装 vim-gtk&#xff08;包含gvim和vim&#xff09;&#xff0c;使用 gvim 可以正常调用 " 寄存器。