gpt4 book ai didi

java - 多线程应用程序中编译时和运行时类路径不匹配的原因是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:14:26 24 4
gpt4 key购买 nike

我正在编写一个 Swing 桌面应用程序。我使用以下方法编译我的程序:

C:\MyJavaPrograms\src>"C:\Program Files\Java\jdk1.7.0_04\bin\javac" SVNTool.java -cp ".;C:\parsers\commons\commons-lang-2.4.jar;C:\parsers\svnkit-1.7.4-v1\lib\svnkit-cli-1.7.4-v1.jar;C:\parsers\svnkit-1.7.4-v1\lib\svnkit-1.7.4-v1.jar"

然后我调用我的程序使用:

C:\MyJavaPrograms\src>"C:\Program Files\Java\jdk1.7.0_04\bin\java" SVNTool -cp ".;C:\parsers\commons\commons-lang-2.4.jar;C:\parsers\svnkit-1.7.4-v1\lib\svnkit-cli-1.7.4-v1.jar;C:\parsers\svnkit-1.7.4-v1\lib\svnkit-1.7.4-v1.jar"

它编译得很好。它开始很好。但是当我点击按钮时,它创建了一个 SwingWorker 线程,但是这个线程因 NoClassDefFoundError 而失败。

我已经在网上搜索过,并且能够通过使用以下方法将一些 jar 文件添加到 CLASSPATH 环境变量来解决这个问题:

C:\MyJavaPrograms\src>set CLASSPATH=%CLASSPATH%;C:\parsers\svnkit-1.7.4-v1\lib\svnkit-1.7.4-v1.jar;C:\parsers\svnkit-1.7.4-v1\lib\svnkit-cli-1.7.4-v1.jar;C:\parsers\commons\commons-lang-2.4.jar

那么,是什么原因导致多线程 Swing 应用程序中编译时和运行时的类路径不匹配?有没有办法让所有环境变量和命令行选项对线程可用?

最佳答案

线程与您的问题无关。假设您在源文件中使用库 A.jar 中的类 Foo。要编译您的类,您需要在类路径中使用 A.jar,以便编译器能够了解 Foo、它的方法、字段等。但是如果代码Foo 依赖于 B.jar 中的另一个类 Bar,您还需要 B.jar运行时类路径。

简而言之,你只需要类路径中的直接依赖项即可编译。但是您需要类路径中的所有传递依赖项才能运行该程序。

你不应该弄乱 CLASSPATH 环境变量。始终使用 -cp 选项来设置程序的类路径。

关于java - 多线程应用程序中编译时和运行时类路径不匹配的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com