我有一個Java中的大型系統,其中basicaly由用戶界面,應用程序的「核心引擎」和許多其他模塊組成。 我正在嘗試創建一個只包含「核心引擎」而不包含其他部分的小程序,因此我需要共享相同的代碼庫以跟上更新。 我已經做到了這一點,它的效果很好,問題在於我不需要使用其他部分中使用的很多外部jar,而且applet目前需要它們。如何使Java不調用外部庫
我不調用需要外部jar的代碼部分,並且當我調用一個類的構造函數時,堆棧跟蹤給我一個錯誤,所以我猜測它需要儘快使用jar因爲這個類(我使用構造函數)被加載。但是我在互聯網上看過,Java只在需要時才加載類,所以我不確定這裏發生了什麼。有誰能給我一些建議,我該如何讓它不需要這些罐子? PS:我確定最好的方法是重構它,將功能分成清晰的圖層,這樣我就可以更輕鬆地解決這個問題。問題在於,這是一個非常古老而龐大的代碼庫,正在進行這種大規模重構(儘管我想)現在不可行。
編輯 - 加入堆棧跟蹤的一個和更多信息:
java.io.FileNotFoundException: http://localhost:3000/applet/jess.jar
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getJarFileWithoutCache(Unknown Source)
at com.sun.deploy.net.DownloadEngine.downloadJarFileWithoutCache(Unknown Source)
at sun.plugin.PluginURLJarFileCallBack$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source)
at sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source)
at sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source)
at sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source)
at sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source)
at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$1000(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at my.package.MyClass.<init>(MyClass.java:187)
at my.package.MyApplet.start(MyApplet.java:38)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.start(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
MyClass的線187僅僅是: MyClass2 OBJ =新MyClass2();
所有其他FileNotFoundException跟蹤都是相同的,但缺少其他文件。 此外,在這個系統上,我有不止一個發行版(學術和商業版本,例如),許多所需的罐子不在學術版本中,但我可以使用相同的代碼編譯其他版本沒有問題需要這些罐子。
我知道是一種艱難的情況給予幫助,但我雖然也許有人已經處於類似的情況,並可以給我一個提示。
此外,有沒有任何機會這一事實,我有這樣一些方法:
public void myMethod() {
ClassInOneOfTheJars c = new ClassInOneOfTheJars();
}
但絕不可以將這個方法可以使VM嘗試獲取包含ClassInOneOfTheJars罐子? (據我所讀,似乎答案是'不')。
如果您正在獲取ClassNotFoundExceptions是因爲您顯然確實正在使用有問題的類。如果你認爲你不需要它們,那麼你爲什麼要實例化它們?我想不看代碼只有你可以回答。 – 2012-07-31 23:33:42
沒有更多細節和堆棧跟蹤,任何人都無法提供幫助。 – 2012-07-31 23:34:13
它實際上是一個FileNotFoundException(如果我把文件放在那裏,一切運行良好,但我不應該需要這些文件,這就是問題所在)。 添加了一個示例堆棧跟蹤。 – 2012-08-01 00:00:49