当前位置: 首页 > 知识库问答 >
问题:

从可执行文件启动应用时,文本文件不会打开

公羊灿
2023-03-14

我正在使用JDK17和Gradle7.3开发一个小型的libgdx项目。在这个项目中,我使用位于assets文件夹中的文本文件生成地图。我使用Gdx。文件夹。内部(“map.txt”);行来加载它,而不是使用缓冲读取器来读取它。以下是我的文本文件中的内容:

g w g g g g g g g g
g w w w w g g c g c 
g g g g w g g g g g
g g g g w g g g g g 
g g g g w w g g g u
g g g g g w g g g g 
g g g g g w g c g g
g u u g g w g g g g 
g g w g g w w g g g
g g g g g g w g g g 

这是我使用这个文件的代码示例

file = Gdx.files.internal("map.txt");
        
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file.path()));
        String s = "";
        int count = 0;
        while((s = bufferedReader.readLine()) != null) {
            System.out.println(s);
            map[count] = s.split(" ");
            count++;
        }
        bufferedReader.close();
        
        
        for(int row = 9; row >= 0; row--) {
            for(int col = 9; col >= 0; col--) {
                
                float x = (row - col) * 64 / 2F; 
                float y = (col + row) * 32 / 2F;
                
                if(map[row][col].equals("g")) {
                    base.add(new Tile(grass, new Vector2(row, col), new Vector2(x, y)));
                } else if(map[row][col].equals("w")) {
                    base.add(new Tile(water, new Vector2(row, col), new Vector2(x, y)));
                } else if(map[row][col].equals("c")){
                    base.add(new Tile(charcoal, new Vector2(row, col), new Vector2(x, y)));
                } else if(map[row][col].equals("u")) {
                    base.add(new Tile(uranium, new Vector2(row, col), new Vector2(x, y)));
                }
            }
        }

当我从我的IDE运行它时,这是完美的。

从ide运行的应用程序

现在我想创建我的项目的. exe。我几乎是用Jpack做的。该应用程序运行的资产文件夹中的. png正在加载,但不是我的map.txt.

从应用程序运行。exe

我不确定图片的链接是否正常,但基本上地图不会显示出来;

这是我的毕业证书。为我的桌面应用程序构建:我认为问题可能就在那里,但我只学习java和所有这些,所以我无法解决它。。。

plugins { id 'org.beryx.runtime' version '1.8.4' }
apply plugin: "java"

sourceCompatibility = 1.7

sourceSets.main.resources.srcDirs = ["../core/assets"]
sourceSets.main.java.srcDirs = [ "src/" ]


mainClassName = "com.simpower.desktop.DesktopLauncher"
def osName = System.getProperty('os.name').toLowerCase(Locale.ROOT)
project.ext.assetsDir = new File("../core/assets")


task runGame(dependsOn: classes, type: JavaExec) {
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
    workingDir = project.assetsDir
    ignoreExitValue = true
}

task debug(dependsOn: classes, type: JavaExec) {
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
    workingDir = project.assetsDir
    ignoreExitValue = true
    debug = true
}

task dist(type: Jar) {
    manifest {
        attributes 'Main-Class': project.mainClassName
    }
    dependsOn configurations.runtimeClasspath
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    with jar
    destinationDirectory = file("$buildDir/lib")
}
jpackageImage.dependsOn dist

dist.dependsOn classes

eclipse.project.name = appName + "-desktop"

runtime {
    options = ['--strip-debug',
               '--compress', '2',
               '--no-header-files',
               '--no-man-pages',
               '--strip-native-commands',
               '--vm', 'server']
    modules = ['java.base' ,
               'java.desktop',
               'jdk.unsupported']
    distDir = file(buildDir)

    jpackage {
        //jpackageHome = '/usr/lib/jvm/open-jdk'
        mainJar = dist.archiveFileName.get()
        if (osName.contains('windows')) {
            imageOptions = ["--icon", file("../icons/icon.ico")]
        } else if (osName.contains('linux')) {
            imageOptions = ["--icon", file("../icons/icon.png")]
        } else if (osName.contains('mac')) {
            imageOptions = ["--icon", file("../icons/icon.icns")]
        }
    }

所以我想知道我怎样才能解决这个问题。

共有1个答案

史懿轩
2023-03-14

您正在使用打开文件

file = Gdx.files.internal("map.txt");
... new FileReader(file.path()) ... ;

我假设它访问当前工作目录中的文件系统。

  • 打印出file.getAbsoltePath()
  • 检查是否file.exists()
  • 当您从Eclipse启动时,请检查您的当前工作目录--这是肯定的项目目录,也托管您的map.txt.
  • 启动exe时检查当前工作目录。是否包含map.txt?

作为一种替代检查,您可以硬编码文件的绝对路径,看看会发生什么。

 类似资料:
  • 问题内容: 我创建了一个要在后台隐形运行的应用程序(无控制台)。我该怎么做呢? (这是针对Windows,在Windows 7 Pro 64位上测试的) 问题答案: 在网上找到的文档说,我可以按照以下方式进行编译, 但这给出了一个错误: 对于较新的(1.1?)版本的编译器,这应该可以工作: 当我继续搜索时,我发现应该尽快更新官方文档,但是与此同时,还有很多较旧的示例回答了该错误。

  • 所以一切都很好,就像2到3周前一样,突然我所有的jar文件都无法通过双击打开 我检查了我的注册表,但一切正常,关联的. jar应用程序可以使用javaw运行,但我仍然无法双击运行可执行的. jar文件 我可以用javaw -jar文件名在cmd中运行它们.jar但它不适用于我的世界,我不能用那个cmd运行我的世界,我想让它,所以每个可执行文件.jar文件都可以打开双击 我的 java 命令在 cm

  • 问题内容: 我需要从我的Python脚本执行该脚本。 可能吗?该脚本会生成一些输出,并写入一些文件。如何访问这些文件?我尝试了子流程调用功能,但没有成功。 应用程序“ bar”还引用了一些库,除了输出外,它还创建了文件“ bar.xml”。我如何访问这些文件?只是通过使用open()? 谢谢, 编辑: Python运行时的错误仅是这一行。 问题答案: 要执行外部程序,请执行以下操作: 是的,假设您

  • 我有一个Java应用程序,它位于我编译为可执行jar文件的系统托盘中。我想在我的程序中添加添加到系统启动项的选项。 由于我不知道有什么统一的方法可以为所有操作系统做到这一点,我假设我必须为我打算支持的每个操作系统编写代码,所以我从Windows开始。 当我试图使用此处可用的代码将其添加到注册表中时,我发现在Windows 7和8下,除非我具有管理员权限(通过从提升的命令提示符运行),否则我对注册表

  • 问题内容: 我想从Java程序启动文件(文档),并逐步满足以下要求: 方法必须在Mac,Win和Linux系统上适用 我不允许使用“ Runtime.getRuntime()。exec(“ cmd.exe / C +”文件名“); 我正在启动的文件必须是.doc / .docx / .rtf 该文件是在运行时创建的,它是从创建报告得出的结果。有什么好的做法吗? 问题答案: 使用Java桌面API。

  • 我想让一个批处理文件在启动时运行在我的Windows10机器上。为了实现这一点,我在以下文件中设置了批处理文件startup.bat的快捷方式: 用户->用户名->AppData->漫游->Microsoft->Windows->开始菜单->程序->启动 因为这是在运行命令框中键入“shell:startup”时出现的路径。我正尝试在批处理文件中运行以下命令: 它应该将右侧的文件路径替换为“w:”