Java WebStart 的 ClassNotFoundException
ClassNotFoundException for Java WebStart
我正在努力学习 Java WebStart THIS TUTORIAL, but I am running into a ClassNotFoundException. I deployed my jar file to https://dalayach.github.io/TestClass.jar
这是堆栈跟踪
java.lang.ClassNotFoundException: testPackage.TestClass
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
这是我的TestClass.jnlp
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase=
"https://dalayach.github.io"
href="TestClass.jnlp">
<information>
<title>TestClass Title</title>
<vendor>TestClass Vendor</vendor>
</information>
<resources>
<!-- Application Resources -->
<j2se version="1.8+"
href="http://java.sun.com/products/autodl/j2se"/>
<jar href="TestClass.jar"
main="true" />
</resources>
<application-desc
name="TestClass application-desc name"
main-class=
"testPackage.TestClass"
width="300"
height="300">
</application-desc>
<update check="background"/>
</jnlp>
这是我的 TestClass.java
package testPackage;
import javax.swing.JFrame;
public class TestClass
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setTitle("TestClass JFrame title");
frame.setSize(300, 300);
frame.setLocation(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
这里是mymanifest.txt
Permissions: sandbox
Codebase: dalayach.github.io
Application-Name: TestClass
Main-Class: testPackage.TestClass
最后,这里是一些相关信息
$ javac -version
javac 1.8.0_291
$ java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
$ curl https://dalayach.github.io/TestClass.jnlp
/** It returned my up-to-date jnlp */
$ curl https://dalayach.github.io/TestClass.jar
/** same for jar */
$ curl https://dalayach.github.io/testPackage/TestClass.java
/** same for java */
$ javac testPackage/TestClass.java
/** this is how I compile my class */
$ jar cvfm TestClass.jar mymanifest.txt testPackage/
/** this is how I construct my jar file, per the instructions linked in the beginning */
$ java -jar TestClass.jar
/** my application successfully starts */
$ jar tvf TestClass.jar
0 Sat May 29 16:46:46 EDT 2021 META-INF/
185 Sat May 29 16:46:46 EDT 2021 META-INF/MANIFEST.MF
0 Sat May 29 16:46:18 EDT 2021 testPackage/
659 Sat May 29 16:46:32 EDT 2021 testPackage/TestClass.class
385 Sat May 29 16:46:18 EDT 2021 testPackage/TestClass.java
And when I open the MANIFEST.MF, I see this.
Manifest-Version: 1.0
Application-Name: TestClass
Permissions: sandbox
Codebase: dalayach.github.io
Created-By: 1.8.0_291 (Oracle Corporation)
Main-Class: testPackage.TestClass
我已经尝试了 .jnlp 和 .java 的多种选项。您可以看到我尝试过的完整列表 HERE。有任何想法吗?它不必解决它,任何取得进展的想法都会有所帮助和赞赏!提前谢谢你。
显然,我的代码没有错,但我进行更改和测试更改的速度如此之快,以至于我进行更新的速度比 Java WebStart 可以检查它们的速度还要快。
这是因为我上面的更新策略 -- 如果您在 .jnlp
中设置了 <update check="background"/>
,您是在告诉 Java WebStart 下载最新文件偷懒。这意味着如果您在不同的解决方案之间快速来回跳转,Java WebStart 可能真的太慢而无法跟上,并且在旧版本最终出现时已经过时了。
有 2 个解决方案中的 1 个可供选择。
将 update policy 更改为 TestClass.jnlp
。
- 如果您希望 Java WebStart 等到所有更新都已下载后再尝试 运行 您的应用程序,您应该将更新策略更改为这样的内容 -
<update check="always">
。这样,您可以保证您的 jnlp 正在提取最新的文件。
在每个 运行 申请前使用 javaws -uninstall
- 这个命令clears the cache,让你的程序需要重新下载新鲜。这实际上与上述项目符号的结果相同,但这允许您使用首选设置保留
.jnlp
文件。另外,您不必在调试任何设置时来回切换它。只需清除缓存并进行测试即可。
我正在努力学习 Java WebStart THIS TUTORIAL, but I am running into a ClassNotFoundException. I deployed my jar file to https://dalayach.github.io/TestClass.jar
这是堆栈跟踪
java.lang.ClassNotFoundException: testPackage.TestClass
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
这是我的TestClass.jnlp
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase=
"https://dalayach.github.io"
href="TestClass.jnlp">
<information>
<title>TestClass Title</title>
<vendor>TestClass Vendor</vendor>
</information>
<resources>
<!-- Application Resources -->
<j2se version="1.8+"
href="http://java.sun.com/products/autodl/j2se"/>
<jar href="TestClass.jar"
main="true" />
</resources>
<application-desc
name="TestClass application-desc name"
main-class=
"testPackage.TestClass"
width="300"
height="300">
</application-desc>
<update check="background"/>
</jnlp>
这是我的 TestClass.java
package testPackage;
import javax.swing.JFrame;
public class TestClass
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setTitle("TestClass JFrame title");
frame.setSize(300, 300);
frame.setLocation(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
这里是mymanifest.txt
Permissions: sandbox
Codebase: dalayach.github.io
Application-Name: TestClass
Main-Class: testPackage.TestClass
最后,这里是一些相关信息
$ javac -version
javac 1.8.0_291
$ java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
$ curl https://dalayach.github.io/TestClass.jnlp
/** It returned my up-to-date jnlp */
$ curl https://dalayach.github.io/TestClass.jar
/** same for jar */
$ curl https://dalayach.github.io/testPackage/TestClass.java
/** same for java */
$ javac testPackage/TestClass.java
/** this is how I compile my class */
$ jar cvfm TestClass.jar mymanifest.txt testPackage/
/** this is how I construct my jar file, per the instructions linked in the beginning */
$ java -jar TestClass.jar
/** my application successfully starts */
$ jar tvf TestClass.jar
0 Sat May 29 16:46:46 EDT 2021 META-INF/
185 Sat May 29 16:46:46 EDT 2021 META-INF/MANIFEST.MF
0 Sat May 29 16:46:18 EDT 2021 testPackage/
659 Sat May 29 16:46:32 EDT 2021 testPackage/TestClass.class
385 Sat May 29 16:46:18 EDT 2021 testPackage/TestClass.java
And when I open the MANIFEST.MF, I see this.
Manifest-Version: 1.0
Application-Name: TestClass
Permissions: sandbox
Codebase: dalayach.github.io
Created-By: 1.8.0_291 (Oracle Corporation)
Main-Class: testPackage.TestClass
我已经尝试了 .jnlp 和 .java 的多种选项。您可以看到我尝试过的完整列表 HERE。有任何想法吗?它不必解决它,任何取得进展的想法都会有所帮助和赞赏!提前谢谢你。
显然,我的代码没有错,但我进行更改和测试更改的速度如此之快,以至于我进行更新的速度比 Java WebStart 可以检查它们的速度还要快。
这是因为我上面的更新策略 -- 如果您在 .jnlp
中设置了 <update check="background"/>
,您是在告诉 Java WebStart 下载最新文件偷懒。这意味着如果您在不同的解决方案之间快速来回跳转,Java WebStart 可能真的太慢而无法跟上,并且在旧版本最终出现时已经过时了。
有 2 个解决方案中的 1 个可供选择。
将 update policy 更改为
TestClass.jnlp
。- 如果您希望 Java WebStart 等到所有更新都已下载后再尝试 运行 您的应用程序,您应该将更新策略更改为这样的内容 -
<update check="always">
。这样,您可以保证您的 jnlp 正在提取最新的文件。
- 如果您希望 Java WebStart 等到所有更新都已下载后再尝试 运行 您的应用程序,您应该将更新策略更改为这样的内容 -
在每个 运行 申请前使用
javaws -uninstall
- 这个命令clears the cache,让你的程序需要重新下载新鲜。这实际上与上述项目符号的结果相同,但这允许您使用首选设置保留
.jnlp
文件。另外,您不必在调试任何设置时来回切换它。只需清除缓存并进行测试即可。
- 这个命令clears the cache,让你的程序需要重新下载新鲜。这实际上与上述项目符号的结果相同,但这允许您使用首选设置保留