【问题标题】:Why if I run a java project from NetBeans it works but the jar file deosn not work well?为什么如果我从 NetBeans 运行 java 项目,它可以工作,但 jar 文件 deosn 不能正常工作?
【发布时间】:2015-07-30 16:20:33
【问题描述】:

我的问题是:为什么如果我从 NetBeans 运行 Java 项目,它可以完美运行,但是如果我创建同一个项目的 jar 文件,某些功能就不起作用? 特别是,下面的代码应该执行一个 bat 文件(在项目本身的 src 文件夹中)并将视频从一个目录移动到另一个目录。 执行此操作的 java 代码是:

String pathMoveBat = new java.io.File("src\\move.bat").getAbsolutePath();
Process move = Runtime.getRuntime().exec(pathMoveBat+" "+username+" "+dateFormat.format(currentDate)+" "+i+"");

文件move.bat是

cd C:\Users\%1\Videos\LogitechWebcam
FORFILES /M *.wmv /C "cmd /c move @file C:\Users\%1\Desktop\%2\videos\video%3"

【问题讨论】:

  • 试试cd /d C:\Users\%1\Videos\LogitechWebcam
  • 你不能从 jar 中执行 bat 文件。你需要先解压。

标签: java batch-file exec


【解决方案1】:

该过程可能会开始,但几乎会立即阻塞,除非您关心它的 stderr 和 stdout 流。检查文档。

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Process.html

默认情况下,创建的进程没有自己的终端或 安慰。它的所有标准 I/O(即标准输入、标准输出、标准错误)操作 将被重定向到可以访问它们的父进程 通过使用 getOutputStream() 方法获得的流, getInputStream() 和 getErrorStream()。父进程使用这些 流向流程提供输入并从流程中获取输出。因为有些 本机平台只为标准输入提供有限的缓冲区大小 和输出流,未能及时写入或读取输入流 进程的输出流可能会导致进程阻塞,或者 甚至陷入僵局。

另一件事是 src 文件夹通常不会添加到 zip 中,正如其他人所说,即使是这样,您也无法仅从命令行访问它的内容。

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2013-06-26
    • 2017-01-17
    • 2015-04-11
    • 2022-11-25
    相关资源
    最近更新 更多