繁体   English   中英

Eclipse-从Linux导入Windows的项目未加载资源

[英]Eclipse - project imported to Windows from Linux not loading resources

我在Linux上创建了一个项目,该项目使用了在Linux上运行代码时成功加载的各种资源(.png和.xml),但是一旦将项目导出到Windows,当我尝试执行此操作时,它将引发Null Pointer Exceptions一样的东西。

导出/导入是通过存档文件机制完成的,我还尝试了手动导入源文件,创建文件夹并将资源文件导入其中。 文件夹结构似乎完好无损,资源文件夹在两个平台上均应被标记为源文件夹。

我使用的是与系统相关的文件分隔符,而不是对文件分隔符进行硬编码,因此这应该没有问题。

杂项。 信息:Linux Mint 32位/ Windows 7 64位,带有WindowBuilder的Eclipse,Java 1.7(在两个平台上)

资源加载的示例:

public static void loadGameImages(TreeMap<String, ImageIcon> imageMap)
    {
        String dir_path = GameMechanics.class.getResource(
                File.separator + "gameImages").toString(); // this is where the whole thing breaks
        URI uri = null;
        try
        {
            uri = new URI(dir_path);
        }
        catch (Exception ex)
        {
            raiseError(ex);
        }

        File dir = new File(uri.getPath());
        File[] images = null;
        if (dir.isDirectory())
            images = dir.listFiles();
        for (File f : images)
        {
            if (f.isFile())
                imageMap.put(f.getName(), new ImageIcon(f.getPath()));
        }
    }

堆栈跟踪:

java.lang.NullPointerException
    at hangman.GameMechanics.loadGameImages(GameMechanics.java:98)
    at hangman.MainWindow.<init>(MainWindow.java:90)
    at hangman.MainWindow$1.run(MainWindow.java:65)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(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 Source)
    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)

.getResource()不会接受反斜杠作为分隔符

您需要更改:

File.separator + "gameImages"

至:

"/gameImages"

更一般而言,URI(并且URL是URI的子集)中的路径分隔符是/ ,从不\\

附录:由于您使用Java 1.7,因此请删除File ,然后使用新的Files API。

在Java中处理文件的库中,可以在所有平台上安全地使用/。 因此您可以像这样GameMechanics.class.getResource("/gameImages").toString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM