导致java.lang.InternalError的原因(它扩展了VirtualMachineError)

时间:2011-12-09 13:36:25

标签: java eclipse svn classloader internal

当我尝试进行SVN同步时,我遇到了这个错误。我想知道它为什么会发生,有什么想法吗?它在重启eclipse后效果很好,但我想知道是什么原因导致它以及怎么可能找不到jar。

!ENTRY org.eclipse.team.svn.core.svnnature 4 0 2011-12-09 14:22:15.534
!MESSAGE SVN: '0x00000107: Synchronizing' operation finished with error
!SUBENTRY 1 org.eclipse.team.svn.core.svnnature 4 0 2011-12-09 14:22:15.534
!MESSAGE Synchronize operation failed.
!STACK 0
java.lang.InternalError
    at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:755)
    at sun.misc.URLClassPath.getResource(URLClassPath.java:169)
    at sun.misc.URLClassPath.getResource(URLClassPath.java:221)
    at java.lang.ClassLoader.getBootstrapResource(ClassLoader.java:1151)
    at java.lang.ClassLoader.getResource(ClassLoader.java:1000)
    at java.lang.ClassLoader.getResource(ClassLoader.java:998)
    at java.lang.ClassLoader.getSystemResource(ClassLoader.java:1101)
    at javax.crypto.SunJCE_b.i(DashoA13*..)
    at javax.crypto.SunJCE_b.g(DashoA13*..)
    at javax.crypto.SunJCE_b$1.run(DashoA13*..)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.crypto.SunJCE_b.<clinit>(DashoA13*..)
    at javax.crypto.KeyAgreement.getInstance(DashoA13*..)
    at com.sun.net.ssl.internal.ssl.JsseJce.getKeyAgreement(JsseJce.java:241)
    at com.sun.net.ssl.internal.ssl.JsseJce.isEcAvailable(JsseJce.java:158)
    at com.sun.net.ssl.internal.ssl.CipherSuite$KeyExchange.isAvailable(CipherSuite.java:271)
    at com.sun.net.ssl.internal.ssl.CipherSuite.isAvailable(CipherSuite.java:143)
    at com.sun.net.ssl.internal.ssl.CipherSuiteList.buildAvailableCache(CipherSuiteList.java:210)
    at com.sun.net.ssl.internal.ssl.CipherSuiteList.getDefault(CipherSuiteList.java:233)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.init(SSLSocketImpl.java:508)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:451)
    at com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:56)
    at org.tmatesoft.svn.core.internal.util.SVNSocketFactory.createSSLSocket(SVNSocketFactory.java:73)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.connect(HTTPConnection.java:186)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:327)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:275)
    at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:263)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:516)
    at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:98)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:999)
    at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.getRepositoryUUID(DAVRepository.java:146)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.createRepository(SVNBasicClient.java:342)
    at org.tmatesoft.svn.core.wc.SVNBasicClient.createRepository(SVNBasicClient.java:330)
    at org.tmatesoft.svn.core.wc.SVNStatusClient.doStatus(SVNStatusClient.java:338)
    at org.tmatesoft.svn.core.javahl.SVNClientImpl.status(SVNClientImpl.java:300)
    at org.tmatesoft.svn.core.javahl.SVNClientImpl.status(SVNClientImpl.java:282)
    at org.polarion.team.svn.connector.svnkit.SVNKitConnector.status(SVNKitConnector.java:341)
    at org.eclipse.team.svn.core.extension.factory.ThreadNameModifier.status(ThreadNameModifier.java:608)
    at org.eclipse.team.svn.core.operation.local.RemoteStatusOperation$2.run(RemoteStatusOperation.java:147)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doSubTask(ProgressMonitorUtility.java:118)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:154)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:149)
    at org.eclipse.team.svn.core.operation.local.RemoteStatusOperation.runImpl(RemoteStatusOperation.java:145)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:81)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104)
    at org.eclipse.team.svn.core.operation.CompositeOperation.runImpl(CompositeOperation.java:95)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:81)
    at org.eclipse.team.svn.core.operation.LoggedOperation.run(LoggedOperation.java:39)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:90)
    at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber.findChanges(AbstractSVNSubscriber.java:314)
    at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber$UpdateStatusOperation$2.run(AbstractSVNSubscriber.java:349)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doSubTask(ProgressMonitorUtility.java:118)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:154)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.protectStep(AbstractActionOperation.java:149)
    at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber$UpdateStatusOperation.runImpl(AbstractSVNSubscriber.java:347)
    at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:81)
    at org.eclipse.team.svn.core.operation.LoggedOperation.run(LoggedOperation.java:39)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:90)
    at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:81)
    at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber.refresh(AbstractSVNSubscriber.java:186)
    at org.eclipse.team.svn.core.synchronize.UpdateSubscriber.refresh(UpdateSubscriber.java:73)
    at org.eclipse.team.core.subscribers.Subscriber.refresh(Subscriber.java:466)
    at org.eclipse.team.core.subscribers.SubscriberMergeContext.refresh(SubscriberMergeContext.java:85)
    at org.eclipse.team.core.mapping.provider.SynchronizationContext.refresh(SynchronizationContext.java:109)
    at org.eclipse.team.internal.ui.synchronize.RefreshModelParticipantJob.doRefresh(RefreshModelParticipantJob.java:69)
    at org.eclipse.team.internal.ui.synchronize.RefreshParticipantJob.run(RefreshParticipantJob.java:309)
    at org.eclipse.team.internal.ui.synchronize.RefreshModelParticipantJob.run(RefreshModelParticipantJob.java:117)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: java.io.FileNotFoundException: /usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/jce.jar
    at sun.misc.URLClassPath$JarLoader.getJarFile(URLClassPath.java:644)
    at sun.misc.URLClassPath$JarLoader.access$600(URLClassPath.java:540)
    at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:607)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.misc.URLClassPath$JarLoader.ensureOpen(URLClassPath.java:599)
    at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:753)
    ... 69 more

不,它始终有效。只有一次没有。

3 个答案:

答案 0 :(得分:3)

查看sun.misc.URLClassPathsun.misc.FileURLMapper的JDK源代码,FileURLMapper.exists()中有代码执行以下操作:

public boolean exists() {
    String path = getPath();
    File f = new File (path);
    return f.exists();
}

假设没有发生任何疯狂事件,例如jce.jar文件实际被删除(例如在Eclipse运行时通过升级Java版本),File.exists()调用可能会由于某些其他原因(内存不足)而失败文件描述符可能吗?在Unix上,file.exists()最终调用stat/stat64 function

答案 1 :(得分:2)

向下钻取code found here我能看到的内容:在第753行调用sun.misc.URLClassPath.JarLoader.ensureOpen()会导致InternalError在第755行被提升。

方法如下:

private void ensureOpen() throws IOException {
    if (jar == null) {
        try {
            java.security.AccessController.doPrivileged(new java.security.PrivilegedExceptionAction() {
                        public Object run() throws IOException {
                            ....
                        }
                    });
        } catch (java.security.PrivilegedActionException pae) {
            throw (IOException) pae.getException(); // this exception is thrown
        }
    }
}

此处java.security.AccessController.doPrivileged(PrivilegedExceptionAction<T>)是本机方法。文档为here

从文档中可以理解,处理error时发生的chekced异常可能会引发public Object run() throws IOException {

答案 2 :(得分:0)

检查此文件

/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/jce.jar

可能您的eclipse尝试使用存储库进行身份验证,但缺少处理和执行身份验证所需的类。