我使用 Eclipse,对于程序,我使用了slick和lwjgl-2.9.3
以下代码处于public void update(…)中的状态
我有这部分代码的问题:
(file.txt存在并且名称中没有大写字母,giveToFile是一个字符串)(没有抛出异常)
try{ BufferedWriter bw = new BufferedWriter(new FileWriter("src/file.txt")); bw.write(giveToFile); bw.close(); }catch(IOException e){ e.printStackTrace(); }
(编辑:
try{ bw = new BufferedWriter(new FileWriter("src/file.txt")); bw.write(giveToFile); bw.flush(); }catch(IOException e){ e.printStackTrace(); }finally { if (bw != null){ try { bw.close(); }catch (Throwable t){ t.printStackTrace(); } } }
产生了同样的bug)
我在try块的末尾放置了一个System.out.print,它运行正常,只运行一次.我还使用了g.drawString,并且giveToFile总是给出预期的String.我执行了以下两个实验. (该程序是一个游戏性的东西,你根据你的表现得到最终得分,并将其置于高分然后重写TXT文件.)(我建议之前阅读TLDR.)
实验1(file.txt:“0 0 0 0 0”)(成功):
>我运行该计划并获得15分.
– 从txt加载的字符串:“0 0 0 0 0”
– giveToFile(string):“15 0 0 0 0”
>我双击Eclipse左侧的TXT文件(包浏览器),它在一个新选项卡中打开,我在txt里面看到:“15 0 0 0 0”,我关闭了标签
>我再次运行程序并获得30分.
– 从文本引出的字符串:“15 0 0 0 0”
– giveToFile(String):“30 15 0 0 0”
>我双击Eclipse左侧的TXT文件(包浏览器),我在txt里面看到:“30 15 0 0 0”,我关闭了标签
>我最后一次运行该程序并获得0分.
– 从txt加载的字符串:“30 15 0 0 0”
– giveToFile(string):“30 15 0 0 0”
实验2(file.txt:“0 0 0 0 0”)(失败):
>我运行该计划并获得15分.
– 从txt加载的字符串:“0 0 0 0 0”
– giveToFile(string):“15 0 0 0 0”
>我双击Eclipse左侧的TXT文件(包浏览器),我关闭了标签
>我再次运行该程序并获得30个字体.
– 从文本引出的字符串:“15 0 0 0 0”
– giveToFile(String):“30 15 0 0 0”
>我不要双击TXT文件,我不打开它在新标签中,我不检查它.
>我最后一次运行该程序并获得0分.
– 来自txt的字符串:“15 0 0 0 0”
– giveToFile(string):“15 0 0 0 0”
TLRD:除非我手动检查,否则程序不会写入TXT文件
对不起这个问题很抱歉,对不起,如果它是超级简单的东西,但我是初学者,在互联网上找不到任何解决方案,感谢提前帮助
编辑:
我用它来关闭程序:( xpos和ypos是鼠标坐标)(基本上是原始退出按钮)
if((xpos>= 200 && xpos <= 400) && (ypos>=100 && ypos <=200)){ if(Mouse.isButtonDown(0)){ System.exit(0); } }
我得到了这个:(没有例外)
Thu Apr 30 16:44:14 CEST 2015 INFO:Slick Build#237
Thu Apr 30 16:44:14 CEST 2015 INFO:LWJGL版本:2.9.3
Thu Apr 30 16:44:14 CEST 2015 INFO:OriginalDisplayMode:1366 x 768 x 32 @ 60Hz
Thu Apr 30 16:44:14 CEST 2015 INFO:TargetDisplayMode:600 x 600 x 0 @ 0Hz
Thu Apr 30 16:44:15 CEST 2015 INFO:开始显示600×600
Thu Apr 30 16:44:15 CEST 2015 INFO:使用Java PNG Loader = true
Thu Apr 30 16:44:15 CEST 2015 INFO:控制器不可用
这部分读取文件,没有其他部分对文件做任何事情,读者工作正常:
try{ InputStream is = getClass().getResourceAsStream("/file.txt"); Scanner fileIn = new Scanner(is); for(int i=0; i<scoreMAX; i++){ scoreInt[i] = fileIn.nextInt(); } fileIn.close(); }catch (Exception e) { e.printStackTrace(); }
它位于public void init中,scoreMAX的类型是public static final int
解决方法
或者,您可以在完成写入后在try块中刷新BufferedWriter,尽管关闭操作将首先刷新它.
这是一个重新审视的例子,Java 6风格:
BufferedWriter bw = null; try { bw = new BufferedWriter(new FileWriter("src/file.txt")); bw.write(giveToFile); // bw.flush(); // if needed } catch(IOException e){ e.printStackTrace(); } finally { if (bw != null) { try { bw.close(); } catch (Throwable t) { t.printStackTrace(); } } }
…和Java 7风格(“试用”和AutoClosables):
try (BufferedWriter bw = new BufferedWriter(new FileWriter("src/file.txt"))) { bw.write(giveToFile); bw.flush(); } catch(IOException e){ e.printStackTrace(); }