我试图通过processBuilder运行带有linux选项的mencoder,但我只能从xterm运行它。当我试图直接运行它时,我在mencoder中遇到错误。 为了更好地解释,我有一个jtexfield,它显示mencoder的所有参数,以及输入和输出路径。这是可编辑的,我可以在那里更改一些参数。然后按"开始" button mencoder运行所有这些参数来转换文件。这很好用,使用xterm:
String[] command= {"/usr/bin/xterm","-e",
lblCommand.getText().toString()};
try {
proc = new ProcessBuilder(command).start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
但我不想让外部终端运行。所以我试图直接运行mencoder并在jtextfield上显示输出。这也有效,但是mencoder并没有像以前一样工作。 如果我改为使用代码:
String command= {"/usr/bin/mencoder",lblCommand.getText().toString()};
try {
proc = new ProcessBuilder(command).start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
然后我没有得到这样的目录错误文件:
java.io.IOException:无法运行程序" / usr / bin / mencoder -sub" /media/Data/input.srt" -subcp iso-8859-7 -spualign 2 -subpos 96 -subfont-text-scale 3.3 -vf pp = lb -ovc lavc -lavcopts vbitrate = 1200 -oac copy" /media/Data/input.avi" -o" /media/Data/dvd/test.avi"":error = 2,此处没有此类文件或目录 java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)at burnsub.MainWindow $ 3.actionPerformed(MainWindow.java:190)at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 在 javax.swing.AbstractButton中的$ Handler.actionPerformed(AbstractButton.java:2348) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在java.awt.Component.processMouseEvent(Component.java:6533)at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)at java.awt.Component.processEvent(Component.java:6298)at java.awt.Container.processEvent(Container.java:2236)at java.awt.Component.dispatchEventImpl(Component.java:4889)at java.awt.Container.dispatchEventImpl(Container.java:2294)at java.awt.Component.dispatchEvent(Component.java:4711)at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 在java.awt.Container.dispatchEventImpl(Container.java:2280)at java.awt.Window.dispatchEventImpl(Window.java:2746)at java.awt.Component.dispatchEvent(Component.java:4711)at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)at at java.awt.EventQueue.access $ 500(EventQueue.java:97)at java.awt.EventQueue $ 3.run(EventQueue.java:709)at java.awt.EventQueue $ 3.run(EventQueue.java:703)at java.security.AccessController.doPrivileged(Native Method)at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 在 java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) 在java.awt.EventQueue $ 4.run(EventQueue.java:731)at java.awt.EventQueue $ 4.run(EventQueue.java:729)at java.security.AccessController.doPrivileged(Native Method)at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 在java.awt.EventQueue.dispatchEvent(EventQueue.java:728)at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 引起:java.io.IOException:error = 2,没有这样的文件或目录 java.lang.UNIXProcess.forkAndExec(Native Method)at java.lang.UNIXProcess。(UNIXProcess.java:247)at java.lang.ProcessImpl.start(ProcessImpl.java:134)at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)......还有37个 线程中的异常" AWT-EventQueue-0"显示java.lang.NullPointerException 在burnsub.MainWindow $ 3.actionPerformed(MainWindow.java:195)at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 在 javax.swing.AbstractButton中的$ Handler.actionPerformed(AbstractButton.java:2348) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在java.awt.Component.processMouseEvent(Component.java:6533)at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)at java.awt.Component.processEvent(Component.java:6298)at java.awt.Container.processEvent(Container.java:2236)at java.awt.Component.dispatchEventImpl(Component.java:4889)at java.awt.Container.dispatchEventImpl(Container.java:2294)at java.awt.Component.dispatchEvent(Component.java:4711)at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 在java.awt.Container.dispatchEventImpl(Container.java:2280)at java.awt.Window.dispatchEventImpl(Window.java:2746)at java.awt.Component.dispatchEvent(Component.java:4711)at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)at at java.awt.EventQueue.access $ 500(EventQueue.java:97)at java.awt.EventQueue $ 3.run(EventQueue.java:709)at java.awt.EventQueue $ 3.run(EventQueue.java:703)at java.security.AccessController.doPrivileged(Native Method)at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 在 java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) 在java.awt.EventQueue $ 4.run(EventQueue.java:731)at java.awt.EventQueue $ 4.run(EventQueue.java:729)at java.security.AccessController.doPrivileged(Native Method)at java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 在java.awt.EventQueue.dispatchEvent(EventQueue.java:728)at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
还有其他方法可以实现这个目标吗?