问题标签 [runtime.exec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1702 浏览

java - 有没有办法在 Java 中生成文件名的 8.3 或“短”(Windows)版本?

在我们的应用程序中,我们允许用户打开文件和目录。

Java 6 为我们提供了...

效果很好。但是,由于我们需要保证Java 5的兼容性,所以我们也实现了一个打开文件的方法,通过在...中调用start命令来实现。cmd.exe

这就是问题出现的地方。该start命令似乎只能处理8.3文件名,这意味着任何非短 (8.3) 文件/目录名称都会导致start命令失败。

有没有一种简单的方法来生成这些短名称?还是有其他解决方法?

0 投票
7 回答
22777 浏览

java - Runtime.getRuntime().exec(),隐藏控制台屏幕

我正在使用 Java 代码执行批处理文件。代码如下:

这样,正常的命令提示符屏幕就会打开。现在我想抑制/隐藏命令提示符窗口(黑色的)。我在某处发现,如果我从命令中删除 start 属性,它不会出现,但是从命令中删除它时,命令不会执行,也不会显示任何异常。

任何人都可以告诉我如何抑制这个窗口吗?

0 投票
2 回答
493 浏览

java - 从 Java 保存到 subversion 存储库

我想保存到颠覆存储库。

我正在使用命令 - svn commit -m \"\" ./cms_test/www

我的课是:

如果这行得通,还是我需要做其他事情。

0 投票
5 回答
2244 浏览

java - Unix 上的 Java 执行

我有下面的 Java 代码在 Unix(AIX 和 Linux)上运行,但它不起作用。如果我运行此代码,则文件 q1.01 未压缩,并且不会引发任何异常(文件 q1.01 存在,并且我希望在命令运行后找到文件 q1.01.Z。)在如果我键入“which compress”,命令提示符会用“/usr/bin/compress”报告回来。如果我在 Unix 提示符下键入命令“/usr/bin/compress q1.01”,它可以正常工作。关于什么可能是错的任何想法?

0 投票
3 回答
9680 浏览

java - Runtime.exec() 与绝对目录

我想使用 Runtime.exec() 在带有空格的目录中启动另一个进程。(听起来很蠢,但我真的很想满足我的好奇心)

问题详情(简化版) 我有一个 myprogram.exe,位于 C:/Program Files/MyProgram。

我观察到:1)。当我调用 Runtime.exec("C://Program Files//MyProgram//myprogram.exe") 时,IOException 表示:找不到文件 C:/Program,错误代码 = 2。我认为它必须是一个结果空间的

2)。我试过:Runtime.exec("/"C://Program Files//MyProgram//myprogram.exe/""),IOException表示:找不到文件:"C:/Program Files/MyProgram/myprogram.可执行程序”

3)。我吸取了教训并尝试了 Runtime.exec() 的重载版本: File dir = new File("C://Program Files//MyProgram//"); 然后运行:Runtime.exec("myprogram.exe", null, dir),它说:can't find file myprogram.exe in C:/Program Files/MyProgram/

4)。我试过 1),而不是“程序文件”,我将它重命名为 Program_Files,一切正常

我知道我也可以使用 ProcessBuilder 来做类似的事情,但我心里放不下……(也许是我的弱点)。谁能告诉我为什么 2) 和 3) 不起作用?

谢谢。

0 投票
10 回答
140577 浏览

java - 如何解决“java.io.IOException: error=12, Cannot allocate memory”调用 Runtime#exec()?

在我的系统上,我无法运行启动进程的简单 Java 应用程序。我不知道怎么解决。

你能给我一些提示如何解决吗?

该程序是:

结果是:

系统配置:

编辑:解决方案 这解决了我的问题,我不知道为什么:

回声 0 > /proc/sys/vm/overcommit_memory

投票支持谁能解释:)

附加信息,顶部输出:

附加信息,免费输出:

0 投票
3 回答
7797 浏览

solaris - Runtime.exec 导致重复的 JVM 无限期挂起,直到被杀死 (Solaris 10)

全部,

我们在 Solaris 10 上使用 jrockit 64 位 JVM (27.3.1) 在 WebLogic 服务器 9.2 MP2 上运行 J2EE 应用程序。

我们调用 use runtime.exec 来调用一个名为 jfmerge 的可执行文件来创建 PDF 文档。

我们发现,在 Solaris 中,当调用 runtime.exec 时,会临时生成一个重复的 JVM 以启动 jfmerge 进程。虽然这是低效的(我们的 JVM 是 5 GB,因此复制的 shell JVM 也是 5 GB),但主要问题在于,当我们的应用程序中此功能(PDF 生成)负载很重时,有时复制的 JVM永远不会退出。

当 JVM 挂起时,服务器会产生大问题(应用程序极度缓慢和用户会话终止),因为整个重复的 JVM 将其所有 5 GB 的进程大小写入磁盘交换。

我们注意到以下挂起的线程与挂起的 JVM 进程相关,直到该进程被手动终止:

“[STUCK] ExecuteThread: '17' for queue: 'weblogic.kernel.Default (self-tuning)'” id=3463 idx=0x158 tid=3460 prio=1 活着,在本地,在 jrockit/io/FileNativeIO 的守护进程。 readBytesPinned(Ljava/io/FileDescriptor;[BII)I(Native Method) at jrockit/io/FileNativeIO.readBytes(FileNativeIO.java:30) at java/io/FileInputStream.readBytes([BII)I(FileInputStream.java) at java/io/FileInputStream.read(FileInputStream.java:194) at java/lang/UNIXProcess$DeferredCloseInputStream.read(UNIXProcess.java:227) at java/io/BufferedInputStream.fill(BufferedInputStream.java:218) at java/io /BufferedInputStream.read(BufferedInputStream.java:235) ^-- 持有锁:java/io/BufferedInputStream@0xfffffffec6510470[thin lock] at gov/v3/common/formgeneration/sessionbean/FormsBean。getProcessStatus(FormsBean.java:809) 在 gov/v3/common/formgeneration/sessionbean/FormsBean.createPDF(FormsBean.java:750) 在 gov/v3/common/formgeneration/sessionbean/FormsBean.getTemplateDetails(FormsBean.java:450)在 gov/v3/common/formgeneration/sessionbean/FormsBean.generateSinglePDF(FormsBean.java:1371) 在 gov/v3/common/formgeneration/sessionbean/FormsBean.generatePDF(FormsBean.java:263) 在 gov/v3/common/formgeneration /sessionbean/FormsBean.endorseDocument(FormsBean.java:2377) at gov/v3/common/formgeneration/sessionbean/Forms_qaco28_EOImpl.endorseDocument(Forms_qaco28_EOImpl.java:214) at gov/v3/delegates/common/FormsAndNoticesDelegate.endorseDocument(FormsAndNoticesDelegate.java :128) 在 gov/v3/actions/common/EndorseDocumentAction.executeRequest(EndorseDocumentAction.java:68) 在 gov/v3/fwk/controller/struts/action/V3CommonDispatchAction.executeBaseAction(V3CommonDispatchAction.java:336) 在 gov/v3/fwk/controller/struts/action/V3CommonDispatchAction.dispatchToExecuteMethod(V3CommonDispatchAction.java:532) /v3/fwk/controller/struts/action/V3BaseDispatchAction.execute(V3BaseDispatchAction.java:69) at org/apache/struts/action/RequestProcessor.processActionPerform(RequestProcessor.java:484) at gov/v3/fwk/controller/struts /requestprocessor/V3TilesRequestProcessor.processActionPerform(V3TilesRequestProcessor.java:384) 在 org/apache/struts/action/RequestProcessor.process(RequestProcessor.java:274) 在 org/apache/struts/action/ActionServlet.process(ActionServlet.java:1482 ) 在 org/apache/struts/action/ActionServlet.doGet(ActionServlet.java:507) 在 gov/v3/fwk/controller/struts/servlet/V3ControllerServlet.doGet(V3ControllerServlet.java:110) 在 javax/servlet/http/HttpServlet.service(HttpServlet.java:743) 在 javax/servlet/http/HttpServlet .service(HttpServlet.java:856) 在 weblogic/servlet/internal/StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 在 weblogic/servlet/internal/StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 在 weblogic/servlet/ internal/ServletStubImpl.execute(ServletStubImpl.java:283) 在 weblogic/servlet/internal/ServletStubImpl.execute(ServletStubImpl.java:175) 在 weblogic/servlet/internal/WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3231) 在 weblogic /security/acl/internal/AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 在 weblogic/security/service/SecurityManager.runAs(SecurityManager.java:121) 在 weblogic/servlet/internal/WebAppServletContext.securedExecute(WebAppServletContext.java:2002) 在 weblogic/servlet/internal/WebAppServletContext.execute(WebAppServletContext.java :1908) 在 weblogic/servlet/internal/ServletRequestImpl.run(ServletRequestImpl.java:1362) 在 weblogic/work/ExecuteThread.execute(ExecuteThread.java:209) 在 weblogic/work/ExecuteThread.run(ExecuteThread.java:181)在 jrockit/vm/RNI.c2java(JJJJJ)V(Native Method) -- 跟踪结束java:1908) 在 weblogic/servlet/internal/ServletRequestImpl.run(ServletRequestImpl.java:1362) 在 weblogic/work/ExecuteThread.execute(ExecuteThread.java:209) 在 weblogic/work/ExecuteThread.run(ExecuteThread.java:181 ) 在 jrockit/vm/RNI.c2java(JJJJJ)V(Native Method) -- 跟踪结束java:1908) 在 weblogic/servlet/internal/ServletRequestImpl.run(ServletRequestImpl.java:1362) 在 weblogic/work/ExecuteThread.execute(ExecuteThread.java:209) 在 weblogic/work/ExecuteThread.run(ExecuteThread.java:181 ) 在 jrockit/vm/RNI.c2java(JJJJJ)V(Native Method) -- 跟踪结束

我们想做几件事:

1.) 防止产生重复的 JVM,因为我们在执行简单的 jfmerge 可执行文件时不需要它的任何功能,它会产生大量开销。

2.) 至少在短期内防止这个重复的 JVM 无限期地移交。

0 投票
1 回答
907 浏览

java - 使用 Runtime.getRuntime().exec 从运行在 Tomcat 上的 Spring Controller 调用基于 .Net Window 的应用程序

我正在通过 Spring Controller 调用一个名为 myapp.exe 的 exe 文件;这是控制器中的代码: Runtime.getRuntime().exec("D:\vmd\apps\myapp.exe");

myapp.exe 是一个 C# .NET 应用程序。如果我使用 Windows 资源管理器直接单击 myapp.exe,应用程序将打开并运行;但是,如果我通过 Tomcat 中的 Spring Controller 调用命令,则应用程序不会打开;但是,当我打开任务管理器时,我可以看到 myapp.exe 进程正在运行。然而,myapp.exe 的窗口并没有打开。在 JBoss 中,应用程序通过 Spring Controller 成功调用。有谁知道为什么 .NET 应用程序不能通过 Tomcat 打开?

Tomcat 作为服务安装。使用 startup.bat 文件手动启动 Tomcat,然后从 Tomcat webapp 中的链接调用 myapp.exe 时,myapp.exe 会成功启动。但是,我不确定 Tomcat 作为服务启动是否会阻止 myapp.exe 正常运行,因为当 JBoss 作为服务启动时,myapp.exe 成功启动。

0 投票
8 回答
86096 浏览

java - 使用 java-ffmpeg 包装器,还是简单地使用 java 运行时来执行 ffmpeg?

我对 Java 很陌生,需要编写一个程序来监听视频转换指令并在新指令到达后转换视频(指令存储在 Amazon SQS 中,但这与我的问题无关)

我面临一个选择,要么使用 Java RunTime 来执行“ffmpeg”转换(比如从命令行),要么我可以使用用 Java http://fmj-sf.net/ffmpeg-java/getting_started.php编写的 ffmpeg 包装器

我更喜欢使用 Java Runtime 直接执行 ffmpeg,并避免使用 java-ffmpeg 包装器,因为我必须学习该库。所以我的问题是直接使用运行时使用 java-ffmpeg 包装器而不是 exec ffmpeg 有什么好处吗?我不需要ffmpeg来播放视频,只需转换视频

谢谢

0 投票
12 回答
9656 浏览

java - java中操作系统的名称(不是“os.name”)

我想知道如何获取 jvm 运行的操作系统类型。它也必须是“安全的”,所以System.getProperty("os.name")它不是一个真正的选择,因为它可以用 -D 指令轻松规避。

我所说的“安全”是指规避的重要性。它适用于桌面应用程序。用户总是可以对代码进行反混淆、反编译、编辑和重新编译,但这比将 -D 传递给 jvm 困难得多。我们想让修补变得不平凡,而不是不可能(因为那是做不到的)。