首页 > 解决方案 > 如何使用最新的 Java LTS 11 运行老式 Java 程序?

问题描述

我想运行 Siemens LOGO Soft Comfort。

dell@dell-Precision-M6400:~/Hämtningar/Logo 6.1/Linux/tools/Application$ ./LOGOComfort 
Unrecognized option: -Xincgc
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
dell@dell-Precision-M6400:~/Hämtningar/Logo 6.1/Linux/tools/Application$ 

这是 Siemens LOGO soft comfort 6.1,我有它的许可证。但我有一个问题。

Unrecognized option: -Xincgc

那么我怎样才能让最新的 Java LTS 11 可以与 2008 年的 Java 一起使用呢?我假设是 Java SE 6 或 J2SE 5.0。

配合LOGO软件,自带binlib两个文件夹

在此处输入图像描述

在此处输入图像描述

更新:

我删除了-Xincgc inLOGOComfort.lax文件,现在我得到了这个

dell@dell-Precision-M6400:~/Hämtningar/Logo 6.1/Linux/tools/Application$ ./LOGOComfort 
Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)

Stack Trace:
java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/windows/WindowsLookAndFeel
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at DE.siemens.ad.logo.app.Application.<clinit>(Application.java:141)
    at Start.startApplication(Start.java:570)
    at Start.main(Start.java:553)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at com.zerog.lax.LAX.launch(DashoA8113)
    at com.zerog.lax.LAX.main(DashoA8113)
Caused by: java.lang.ClassNotFoundException: com.sun.java.swing.plaf.windows.WindowsLookAndFeel
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 18 more
This Application has Unexpectedly Quit: Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)
dell@dell-Precision-M6400:~/Hämtningar/Logo 6.1/Linux/tools/Application$ 

更新:

解决方案:

  1. 删除 -Xincgc
  2. 请改用 Java 8。它需要 Swing。Java 11 不使用 Swing

标签: javajava-11java-6java-5

解决方案


打开文件 'LOGOComfort',因为它可能是一个 shell 脚本。找到该-Xincgc选项并将其删除。

如果它是 gobbledygook,安装一个 java6,它确实有现在删除的-Xincgc选项。

如果这不是一个选项,请制作一个假 java:制作一个位于“真实”java 位置的脚本,它所做的只是扫描所有命令行参数,从中删除 -Xincgc,然后将其余部分通过 unmoleded 传递给真正的java。这是一个疯狂的黑客攻击,可能会破坏其他东西,但它可能会“修复”这个问题。我强烈建议您先选择前两个选项之一。

没有办法告诉 java 11+:你能“支持” -Xincgc 选项吗?


推荐阅读