Java 在Windows 7中将新JFileChooser创建为本地系统帐户时,Win32ShellFolder2.access中的NPE
我已经为创建JFileChooser的Swing GUI编写了单元测试。由于单元测试作为服务在构建服务器上运行,因此单元测试需要作为本地系统帐户运行。但是,当单元测试尝试创建新的JFileChooser时,它们会抛出NullPointerException 我已将问题简化为将以下主类作为本地系统帐户运行(不是真正的代码) 使用以下生成文件Java 在Windows 7中将新JFileChooser创建为本地系统帐户时,Win32ShellFolder2.access中的NPE,java,swing,unit-testing,jfilechooser,local-system-account,Java,Swing,Unit Testing,Jfilechooser,Local System Account,我已经为创建JFileChooser的Swing GUI编写了单元测试。由于单元测试作为服务在构建服务器上运行,因此单元测试需要作为本地系统帐户运行。但是,当单元测试尝试创建新的JFileChooser时,它们会抛出NullPointerException 我已将问题简化为将以下主类作为本地系统帐户运行(不是真正的代码) 使用以下生成文件 <project> <target name="clean"> <delete dir="build"/> &l
<project>
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name="jar" depends="compile">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/FileChooserAsSystem.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="com.example.mcgr.FileChooserAsSystem"/>
</manifest>
</jar>
</target>
<target name="run">
<java jar="build/jar/FileChooserAsSystem.jar" fork="true"/>
</target>
</project>
如何在本地系统帐户启动的JVM中创建JFileChooser对象
我目前使用的是JVM版本1.7.02532bit,并在WindowsServer2008和Windows7上进行了测试。还有一个要求意味着我不能从32位JVM切换到64位JVM
我试过谷歌的各种建议,包括
- 正在传递-Dswing.disableFileChooserSpeedFix=true
- 通过-Duser.home=/
- 传递-Dtemp.dir=C:/temp
谢谢您的帮助。我认为这是Java 7的问题。请检查您的版本并尝试其他版本。或者升级您的java版本。我碰巧遇到了一个非常类似的问题,我成功地解决了这个问题,通过配置管理员帐户(在配置中,而不仅仅是以管理员身份启动)来执行服务。请注意,对于没有密码的管理员帐户,您将无法执行此操作(当然,如果不接触注册表,则无法执行)。这不是JVM问题,而是权限问题。我最近在Windows10机器上遇到了运行Java8V92的类似堆栈跟踪 要解决此问题,请将Windows服务设置为以管理员帐户登录(启动服务,突出显示服务并显示属性,在Windows 10中选择“登录”选项卡):
这是用户配置文件服务吗?@skia.heliou否不是用户配置文件服务。在我的例子中,这个问题只出现在运行自动化测试的工具中。在本地工作站上运行时,这不是问题。我们必须调整该工具服务的权限。希望这有帮助!你能告诉我哪个是你的工具吗?您是如何调整权限的?@user3768904我们的单元测试是使用jUnit编写的,在Ant脚本中定义执行,并通过Jenkins启动。依赖于JFileChooser的测试在通过Eclipse或本地Ant运行启动时运行良好,但在服务器上失败。我使用上述权限更改了Jenkins服务。希望这有帮助。
<project>
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name="jar" depends="compile">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/FileChooserAsSystem.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="com.example.mcgr.FileChooserAsSystem"/>
</manifest>
</jar>
</target>
<target name="run">
<java jar="build/jar/FileChooserAsSystem.jar" fork="true"/>
</target>
</project>
[java] Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
[java] at sun.awt.shell.Win32ShellFolder2.access$200(Win32ShellFolder2.java:72)
[java] at sun.awt.shell.Win32ShellFolder2$1.call(Win32ShellFolder2.java:242)
[java] at sun.awt.shell.Win32ShellFolder2$1.call(Win32ShellFolder2.java:237)
[java] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
[java] at java.util.concurrent.FutureTask.run(FutureTask.java:166)
[java] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[java] at sun.awt.shell.Win32ShellFolderManager2$ComInvoker$3.run(Win32ShellFolderManager2.java:502)
[java] at java.lang.Thread.run(Thread.java:724)