我想执行PicturePackage中的wmv视频文件。 我正在使用以下代码:
try {
File f;
f = new File(getClass().getResource("/PicturePackage/admin_input.wmv").toURI());
Desktop.getDesktop().open(f);
} catch (URISyntaxException | IOException ex) {
Logger.getLogger(Help.class.getName()).log(Level.SEVERE, null, ex);
}
当我在netbeans中运行时,此代码运行并播放视频。但是当我通过netbeans构建的jar文件执行它时,它不会运行视频文件。 我没有处理的任何具体问题???
编辑:
我试过这个
File tempFile = null;
try (InputStream in =
getClass().getResourceAsStream("/PicturePackage/admin_input.wmv")) {
Path temp = Files.createTempFile("temp", ".wmv");
Files.copy(in, temp);
tempFile = temp.toFile();
// This will try to delete the file when you close your java app
tempFile.deleteOnExit();
} catch (Exception e) {
// Handle the exceptions properly
}
// Here you can use tempFile to open it
if (tempFile != null) {
try {
Desktop.getDesktop().open(tempFile);
} catch (IOException e) {
// Handle exception
}
}
这是我得到的堆栈跟踪
java.nio.file.FileAlreadyExistsException:C:\ Users \ Ashu \ AppData \ Local \ Temp \ temp1136027223125637051.wmv at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:81) at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102) at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230) 在java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:430) at java.nio.file.Files.newOutputStream(Files.java:170) 在java.nio.file.Files.copy(Files.java:2841) 在gatetestadmin.Help.jButton1ActionPerformed(Help.java:148) 在gatetestadmin.Help.access $ 000(Help.java:23) 在gatetestadmin.Help $ 1.actionPerformed(Help.java:63) 在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 在javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2341) 在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:6505) 在javax.swing.JComponent.processMouseEvent(JComponent.java:3320) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) at java.awt.EventQueue.access $ 200(EventQueue.java:103) at java.awt.EventQueue $ 3.run(EventQueue.java:694) at java.awt.EventQueue $ 3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue $ 4.run(EventQueue.java:708) at java.awt.EventQueue $ 4.run(EventQueue.java:706) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
答案 0 :(得分:0)
从Netbeans运行时,您的wmv文件作为独立的独立文件存在。这可以由外部视频播放器播放。
当您将应用程序打包到jar中并将其作为jar运行时,wmv将打包到jar中,您创建的f
文件将引用该jar条目。此jar条目将无法提供/解释给外部视频播放器。
你必须解压缩wmv,将其保存为临时文件并打开它。或者不要将视频文件包含在jar中,将其放在jar旁边。
以下是如何将视频提取到临时文件:
File tempFile = null;
try (InputStream in =
getClass().getResourceAsStream("/PicturePackage/admin_input.wmv")) {
Path temp = Files.createTempFile("temp", ".wmv");
Files.copy(in, temp, StandardCopyOption.REPLACE_EXISTING);
tempFile = temp.toFile();
// This will try to delete the file when you close your java app
tempFile.deleteOnExit();
} catch (Exception e) {
// Handle the exceptions properly
}
// Here you can use tempFile to open it
if (tempFile != null) {
try {
Desktop.getDesktop().open(tempFile);
} catch (IOException e) {
// Handle exception
}
}