ZipException: zip END заголовок не найден в java-9

util.zip.ZipException: zip END заголовок не найден
исключение при попытке загрузить представление javafx fxml в java-9.

подробности
Мое приложение представляет собой Javafx (использует представление fxml), которое построено и скомпилировано с использованием java-8(64-разрядная версия jdk-8) и доступно как WebStart с jre-9(64-разрядное).
Веб-страницы (xhtml) загружаются и отображаются в этом приложении javafx.

Также обратите внимание, что
Уже сообщалось о двух похожих ошибках (т.е. JDK-8170276, JDK-8172872) и
эти две ошибки упоминали, что проблема не воспроизводима с последней версией Java-9
но воспроизводимо только с более ранней версией java-9 ea build.

Но в моем случае я использую последнюю версию 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.util.zip.ZipException: исключение zip END header не найдено" в java-9, но в 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();
}

}

0 ответов

Другие вопросы по тегам