英文:
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
无法识别的选项:-Xincgc
错误:无法创建Java虚拟机。
错误:发生了致命异常。程序将退出。
dell@dell-Precision-M6400:~/Hämtningar/Logo 6.1/Linux/tools/Application$
这是西门子LOGO软件舒适版6.1,我有许可证。但是我遇到了一个问题。
无法识别的选项:-Xincgc
那么我该如何使最新的Java LTS 11能够与2008年的Java一起工作呢?我假设那是Java SE 6或J2SE 5.0。
使用LOGO软件,它附带了两个文件夹bin和lib。
更新:
我在LOGOComfort.lax
文件中删除了-Xincgc
,现在我得到了这个:
dell@dell-Precision-M6400:~/Hämtningar/Logo 6.1/Linux/tools/Application$ ./LOGOComfort
此Java应用程序的调用导致了InvocationTargetException。该应用程序现在将退出。(LAX)
堆栈跟踪:
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)
原因是: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
此应用程序意外退出:此Java应用程序的调用导致了InvocationTargetException。该应用程序现在将退出。(LAX)
dell@dell-Precision-M6400:~/Hämtningar/Logo 6.1/Linux/tools/Application$
更新:
解决方案:
- 删除 -Xincgc
- 使用Java 8。它需要Swing。Java 11不使用Swing。
英文:
I want to run 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$
This is Siemens LOGO soft comfort 6.1 and I have a license for that. But I have an issue.
Unrecognized option: -Xincgc
So how can I do so latest Java LTS 11 can work with Java from 2008? I assume that is Java SE 6 or J2SE 5.0.
With LOGO software, it comes with two folders bin and lib
Update:
I removed the -Xincgc
in LOGOComfort.lax
file and now I got this
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$
Update:
Solution:
- Remove -Xincgc
- Use Java 8 instead. It requries Swing. Java 11 does not use Swing
答案1
得分: 3
打开名为'LOGOComfort'的文件,因为它很可能是一个Shell脚本。找到-Xincgc
选项并将其移除。
如果内容难以理解,安装Java 6,它仍保留了被移除的-Xincgc
选项。
如果以上不可行,可以创建一个虚假的Java:制作一个脚本,放在“真实”Java位置,它的作用是扫描所有命令行参数,从中删除-Xincgc,然后将剩余部分原封不动地传递给真正的Java。这是一种疯狂的方法,可能会影响其他功能,但很可能能够“修复”这个问题。我强烈建议您首先尝试前两个选项。
对于Java 11+,无法使用-Xincgc选项。
英文:
open the file 'LOGOComfort', as it is likely a shell script. Find the -Xincgc
option and remove it.
If it's gobbledygook, install a java6, which does have the now removed -Xincgc
option.
If that's not an option, make a fake java: Make a script that rests at the 'real' java location, and all it does is scan for all command line args, strip -Xincgc from it, and pass the rest through unmolested to the real java. This is a crazy hack and is likely to break other things, but it will probably 'fix' this. I strongly recommend you go with one of the first 2 options first.
There is no way to tell java 11+: Can you 'support' the -Xincgc option.
答案2
得分: 2
错误消息表示无法找到与Windows关联的外观配置文件。
> java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/windows/WindowsLookAndFeel
显然,该应用程序过去是针对Windows设计的。也许脚本更改了外观配置文件,但如果不查看它,我无法告诉您。
最好的办法是在Windows计算机上尝试一下,看看是否能进一步进行。如果不能,那么您将不得不尝试在支持该配置文件的旧版JRE(例如JRE 6)上运行。
英文:
The error message is saying that it can't find the look and feel profile associated with Windows.
> java.lang.NoClassDefFoundError: com/sun/java/swing/plaf/windows/WindowsLookAndFeel
Clearly, this app was intended for Windows in the past. Maybe the script changes the look and feel profile, but I couldn't tell you without looking at it.
Best bet is try this on a Windows machine and see if it goes any further. If not then you'll have to try it with an older JRE that supports that, such as JRE 6.
答案3
得分: 1
我知道这是一个旧问题,但我仍然有一个可能有效的解决方案(对我有效)。您需要使该应用程序的Java可执行,使用以下命令:
chmod a+x $PATH_TO_LOGO/Application_64/jre/bin/java
英文:
I know this is a old question, but I still have a solution that may work (it worked for me). You need to make the application java executable by
chmod a+x $PATH_TO_LOGO/Application_64/jre/bin/java
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论