0


util.zip.ZipException:尝试在 java-9 中加载 javafx fxml 视图时未找到 zip END 标头异常。

详细信息
我的应用程序是一个Javafx(使用fxml 视图),它使用 java-8(jdk-8 64 位)构建和编译,并作为带有 jre-9(64 位)的 WebStart 访问。
网页(xhtml)在此 javafx 应用程序中加载和呈现。

另请注意,
已经报告了两个类似的错误(即 JDK-8170276、JDK-8172872),并且
这两个错误提到该问题不能用最新的 java-9
重现,但只能用早期的 java-9 ea 构建版本重现。

但就我而言,我使用的是最新的 java-9(9.0.4 版本)并且
它总是可以重现的。

问题
当我在登录后尝试加载 fxml 弹出窗口时,出现以下异常。

java.util.zip.ZipException: zip END header not found
at java.base/java.util.zip.ZipFile$Source.zerror(Unknown Source)
at java.base/java.util.zip.ZipFile$Source.findEND(Unknown Source)
at java.base/java.util.zip.ZipFile$Source.initCEN(Unknown Source)
at java.base/java.util.zip.ZipFile$Source.<init>(Unknown Source)
at java.base/java.util.zip.ZipFile$Source.get(Unknown Source)
at java.base/java.util.zip.ZipFile.<init>(Unknown Source)
at java.base/java.util.zip.ZipFile.<init>(Unknown Source)
at java.base/java.util.jar.JarFile.<init>(Unknown Source)
at java.base/sun.net.www.protocol.jar.URLJarFile.<init>(Unknown Source)
at java.base/sun.net.www.protocol.jar.URLJarFile.<init>(Unknown Source)
at java.base/sun.net.www.protocol.jar.URLJarFile$1.run(Unknown Source)
at java.base/sun.net.www.protocol.jar.URLJarFile$1.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source)
at java.base/sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source)
at java.base/sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source)
at java.base/sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source)
at jdk.deploy@9.0.1/com.sun.deploy.net.protocol.jar.DeployURLConnection.connect(Unknown Source)
at jdk.deploy@9.0.1/com.sun.deploy.net.protocol.jar.DeployURLConnection.getInputStream(Unknown Source)
at java.base/java.net.URL.openStream(Unknown Source)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml/javafx.fxml.FXMLLoader.load(Unknown Source)
at client.FxmlWrapper.initialize(FxmlWrapper.java:57)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Suppressed: java.nio.file.NoSuchFileException: C:\Users\user\AppData\Local\Temp\jar_cache8046747560626483610.tmp
    at java.base/sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
    at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)
    at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
    at java.base/java.nio.file.Files.delete(Unknown Source)
    ... 22 common frames omitted

请求是否有人可以帮助解决这个问题,将不胜感激。
非常感谢。

虽然这不是完整的代码,但这是显示 fxml 弹出窗口的代码,它在 java-9 中抛出“java.util.zip.ZipException: zip END header not found”异常,但在 java-8 中工作正常。

PopupAction.java

public class PopupAction  
{  
public PopupAction()
{
    super();
}

public void showPopup()
{
    CountDownLatch latch = new CountDownLatch(1);
    Platform.runLater(
            new PopupHandler(latch, "testMsg", "testTitle", "testButtonText"));
    try
    {
        latch.await();
    }
    catch(InterruptedException localInterruptedException)
    {

        Thread.currentThread().interrupt();
    }
}
}

PopupHandler.java

public class PopupHandler implements Runnable
{


private CountDownLatch latch;

private String message;

private String title;

private String buttonText;

public PopupHandler(CountDownLatch latch,
        String message, String title, String buttonText)
{

    this.latch = latch;
    this.message = message;
    this.title = title;
    this.buttonText = buttonText;
}

@Override
public void run()
{
    try
    {
            Stage stage = new Stage(StageStyle.UTILITY);
            Parent root;

                stage.initModality(Modality.APPLICATION_MODAL);
                stage.setResizable(false);
                FXMLViewLoader fXMLViewLoader = new FXMLViewLoader("/fxmlView/warningPopup.fxml");
                root = fXMLViewLoader.getView();

                Scene scene = new Scene(root, 400, 110);
                scene.setFill(Color.TRANSPARENT);
                stage.setScene(scene);
                stage.setResizable(false);
                stage.setTitle(this.title);
                stage.initOwner(Application.getOwnerWindow());
                this.localAtomicBoolean.set(true);
                stage.setAlwaysOnTop(true);
                stage.showAndWait();
    }
    catch(Exception e)
    {
         e.printStackTrace();
    }
    finally
    {
        this.latch.countDown();
    }
}
}

FXMLViewLoader.java

   public final class FXMLViewLoader
   {
private FXMLLoader loader;

public FXMLViewLoader(String fxmlName)
{
    super();
    initialize(fxmlName);
}

private void initialize(String fxmlName)
{
    final URL resource = getResourceURL(fxmlName);
    this.loader = new FXMLLoader(resource);

    try
    {
        this.loader.load();
    }
    catch(Exception e)
    {
       e.printStackTrace();
    }
}

protected URL getResourceURL(String fxmlName)
{
    return this.getClass().getResource(fxmlName);
}


public Parent getView()
{
    return this.loader.getRoot();
}

}
4

0 回答 0