0

在 Swing 应用程序中,一些 UI 操作事件在执行和 UI 中会出现延迟并冻结几秒钟。当试图检查使用

ThreadInfo  MonitorInfo[] monitors = threadInfo.getLockedMonitors(); 

StackTraceElement[] stackElements = threadInfo.getStackTrace();

显示和线条连续.. 到组件。

这只发生在 webstart

前任:

**HOLDS MONITORS:** [java.util.zip.ZStreamRef@a4f0208, 
com.sun.deploy.cache.CacheEntry@2788c4ea, 
com.sun.deploy.cache.CachedJarFile@294f3e6b, 
com.sun.jnlp.JNLPClassLoader@5ce11cce, 
javax.swing.plaf.basic.DefaultMenuLayout@d096bf8, 
java.awt.Component$AWTTreeLock@285a2772]
STACK TRACE:
java.util.zip.Inflater.inflateBytes(Native Method)
java.util.zip.Inflater.inflate(Unknown Source)
java.util.zip.InflaterInputStream.read(Unknown Source)
java.util.jar.JarVerifier$VerifierStream.read(Unknown Source)
com.sun.deploy.security.JarVerifier.readAndMaybeSaveStreamTo(Unknown
Source)
com.sun.deploy.security.JarVerifier.authenticateJarEntry(Unknown Source)
com.sun.deploy.security.EnhancedJarVerifier.validate(Unknown Source)
com.sun.deploy.cache.CacheEntry$3.run(Unknown Source)
com.sun.deploy.cache.CacheEntry$3.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
com.sun.deploy.cache.CacheEntry.getJarSigningData(Unknown Source)
com.sun.deploy.cache.CachedJarFile.getSigningData(Unknown Source)
com.sun.deploy.cache.CachedJarFile$JarFileEntry.getCodeSigners(Unknown
Source)
com.sun.deploy.security.DeployURLClassPath$JarLoader$2.getCodeSigners(
Unknown Source)
java.net.URLClassLoader.defineClass(Unknown Source)
java.net.URLClassLoader.access$100(Unknown Source)
java.net.URLClassLoader$1.run(Unknown Source)
java.net.URLClassLoader$1.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(Unknown Source)
com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
4

1 回答 1

0

您是否尝试过将这些方法的调用放在单独的线程中?因为您使用 Swing,所以它主要是线程安全的。是冻结了整个显示器,还是只是窗口?

线程很简单,如果你一直在避免它们:

Thread thread = new Thread(() -> intensiveMethod());
thread.start();

intensiveMethod是您调用的冻结监视器的方法。如果不是您调用它,请尝试安装最新的 JRE 和 JDK。

于 2017-06-14T03:26:37.340 回答