如何使用最新的 Java LTS 11 运行 旧学校 Java 程序?

How to run old school Java programs with latest Java LTS 11?

我要运行西门子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

更新:

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

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。 Java11 没有使用Swing

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

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

如果这不是一个选项,制作一个假的 java:制作一个位于 'real' java 位置的脚本,它所做的只是扫描所有命令行参数,从中剥离 -Xincgc,然后将其余的不受干扰地传递给真正的 java。这是一个疯狂的 hack,可能会破坏其他东西,但它可能 'fix' 这个。我强烈建议您先选择前两个选项之一。

没办法告诉 java 11+:你能 'support' -Xincgc 选项吗?

错误消息说它找不到与 Windows 关联的外观配置文件。

java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/windows/WindowsLookAndFeel

显然,此应用过去是为 Windows 设计的。也许脚本改变了外观配置文件,但我不能不看就告诉你。

最好的办法是在 Windows 机器上试试这个,看看它是否更进一步。如果没有,那么您将不得不尝试使用支持它的旧 JRE,例如 JRE 6。

我知道这是一个老问题,但我仍然有一个可能有效的解决方案(它对我有用)。您需要

使应用程序 java 可执行
chmod a+x $PATH_TO_LOGO/Application_64/jre/bin/java