Java Runnable.jar在Ubuntu上工作,但在Windows上不工作

Java Runnable.jar在Ubuntu上工作,但在Windows上不工作,java,swing,jar,Java,Swing,Jar,在Windows上,从cmd运行.jar时按下submit按钮的方式如下: Microsoft Windows [Version 6.3.9600] (c) 2013 Microsoft Corporation. All rights reserved. C:\Users\Vlad>java -jar run.jar java.lang.NullPointerException at MemoryFileManager.<init>(MemoryFileMan

在Windows上,从cmd运行.jar时按下submit按钮的方式如下:

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\Vlad>java -jar run.jar
java.lang.NullPointerException
        at MemoryFileManager.<init>(MemoryFileManager.java:15)
        at MemoryClassLoader.<init>(MemoryClassLoader.java:12)
        at MemoryClassLoader.<init>(MemoryClassLoader.java:15)
        at Main.run(Main.java:130)
        at GUI$2.mouseClicked(GUI.java:185)
        at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$400(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
MemoryClassLoader
中的第15行:

private final MemoryFileManager manager = new MemoryFileManager(this.compiler);
this(Collections.singletonMap(classname, filecontent));
以及
MemoryFileManager
中的第15行:

super(compiler.getStandardFileManager(null, null, null));  
看到程序在Eclipse和Ubuntu上正确运行,我猜它与javax.tools导入的路径有关?在项目中的某个时刻,我记得我让eclipse从使用JRE转向使用JDK,因为这些类都有错误。我需要做什么才能使它在Windows上运行?我很抱歉,如果这是一个愚蠢的问题,如果它是显而易见的:p

谢谢大家!

编译器
MemoryClassLoader.(MemoryClassLoader.java:12)
中为空。 如果没有任何编译器,则返回null

看起来您确实需要安装JDK来运行这个(或者至少是类路径上的tools.jar):

请将命令行输出复制/粘贴为文本,而不是获取其屏幕截图。文本大小适合阅读,可搜索。完成,对此表示抱歉谢谢!我很确定我已经安装了JDK,因为我用它在Eclipse中运行程序。如果我想继续使用JavaCompiler,除了安装它之外,我还需要做什么吗?只要您在类路径上安装了它,它就会正常运行。如果您安装了多个版本的Java,那么JRE在路径上可能是一个问题。Eclipse也有自己的编译器,它也可以返回。