1

サーバーで Xuggle 5.4 を実行しようとしていますが、対処方法がわからない例外があります。同じコードは、他の 2 つのサーバーでも正常に動作し、別のアプリケーション (Playframework) の下の同じサーバーでも正常に動作します。別のアプリケーションで実行されるという事実は、それが問題である可能性があることを示唆しています。

エラーの根本原因は、Xuggle が一時ファイルを作成しようとしてアクセスが拒否されたことにあるようです。これがどこにあるのか、どうすればわかりますか?前述のように、これは別のインストールで既に使用されている場所であり、別のユーザー アカウントで実行されている可能性があります。

これはスタック トレースです。

2012-05-04 08:49:01,985 ERROR ~ could not create temp file: {}
java.io.IOException: Permission denied
    at java.io.UnixFileSystem.createFileExclusively(Native Method) ~[na:1.6.0_26]
    at java.io.File.checkAndCreate(File.java:1704) ~[na:1.6.0_26]
    at java.io.File.createTempFile(File.java:1792) ~[na:1.6.0_26]
    at com.xuggle.ferry.JNILibrary.unpackLibrary(JNILibrary.java:274) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.JNILibrary.loadFromClasspath(JNILibrary.java:195) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:176) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:158) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.FerryJNI.<clinit>(FerryJNI.java:16) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.Ferry.<clinit>(Ferry.java:25) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.xuggler.XugglerJNI.<clinit>(XugglerJNI.java:19) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.xuggler.IContainer.<clinit>(IContainer.java:1622) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.mediatool.MediaReader.<init>(MediaReader.java:137) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.mediatool.ToolFactory.makeReader(ToolFactory.java:77) [xuggle-xuggler-5.4.jar:5.4.0]
    at logic.server.MediaCoder.createEncodingJobs(MediaCoder.java:39) [idoms-server:na]
    at controllers.FileCopyJob$ProgressListener.actionPerformed(FileCopyJob.java:127) [idoms-server:na]
    at controllers.FileCopyJob$DownloadCountingOutputStream.afterWrite(FileCopyJob.java:84) [idoms-server:na]
    at org.apache.commons.io.output.ProxyOutputStream.write(ProxyOutputStream.java:92) [commons-io-2.0.1.jar:2.0.1]
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1263) [commons-io-2.0.1.jar:2.0.1]
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1236) [commons-io-2.0.1.jar:2.0.1]
    at controllers.FileCopyJob.doJob(FileCopyJob.java:58) [idoms-server:na]
    at play.jobs.Job.doJobWithResult(Job.java:50) [play-1.2.4.jar:na]
    at play.jobs.Job.call(Job.java:146) [play-1.2.4.jar:na]
    at play.jobs.Job$1.call(Job.java:66) [play-1.2.4.jar:na]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [na:1.6.0_26]
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) [na:1.6.0_26]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) [na:1.6.0_26]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) [na:1.6.0_26]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_26]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_26]
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_26]
2012-05-04 08:49:02,003 ERROR ~ could not create temp file: {}
java.io.IOException: Permission denied
    at java.io.UnixFileSystem.createFileExclusively(Native Method) ~[na:1.6.0_26]
    at java.io.File.checkAndCreate(File.java:1704) ~[na:1.6.0_26]
    at java.io.File.createTempFile(File.java:1792) ~[na:1.6.0_26]
    at com.xuggle.ferry.JNILibrary.unpackLibrary(JNILibrary.java:274) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.JNILibrary.loadFromClasspath(JNILibrary.java:195) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:176) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:158) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.FerryJNI.<clinit>(FerryJNI.java:16) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.ferry.Ferry.<clinit>(Ferry.java:25) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.xuggler.XugglerJNI.<clinit>(XugglerJNI.java:19) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.xuggler.IContainer.<clinit>(IContainer.java:1622) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.mediatool.MediaReader.<init>(MediaReader.java:137) [xuggle-xuggler-5.4.jar:5.4.0]
    at com.xuggle.mediatool.ToolFactory.makeReader(ToolFactory.java:77) [xuggle-xuggler-5.4.jar:5.4.0]
    at logic.server.MediaCoder.createEncodingJobs(MediaCoder.java:39) [idoms-server:na]
    at controllers.FileCopyJob$ProgressListener.actionPerformed(FileCopyJob.java:127) [idoms-server:na]
    at controllers.FileCopyJob$DownloadCountingOutputStream.afterWrite(FileCopyJob.java:84) [idoms-server:na]
    at org.apache.commons.io.output.ProxyOutputStream.write(ProxyOutputStream.java:92) [commons-io-2.0.1.jar:2.0.1]
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1263) [commons-io-2.0.1.jar:2.0.1]
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1236) [commons-io-2.0.1.jar:2.0.1]
    at controllers.FileCopyJob.doJob(FileCopyJob.java:58) [idoms-server:na]
    at play.jobs.Job.doJobWithResult(Job.java:50) [play-1.2.4.jar:na]
    at play.jobs.Job.call(Job.java:146) [play-1.2.4.jar:na]
    at play.jobs.Job$1.call(Job.java:66) [play-1.2.4.jar:na]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [na:1.6.0_26]
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) [na:1.6.0_26]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) [na:1.6.0_26]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) [na:1.6.0_26]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_26]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_26]
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_26]
2012-05-04 08:49:02,015 ERROR ~ Could not load library: xuggle; version: 5; Visit http://www.xuggle.com/xuggler/faq/ to find common solutions to this problem
08:49:02,115 ERROR ~ 

@6a91glkdf
Error during job execution (controllers.FileCopyJob)

Oops: UnsatisfiedLinkError
An unexpected error occured caused by exception UnsatisfiedLinkError: no xuggle in java.library.path

play.exceptions.UnexpectedException: Unexpected Error
    at play.Invoker$Invocation.onException(Invoker.java:244)
    at play.jobs.Job.onException(Job.java:124)
    at play.jobs.Job.call(Job.java:163)
    at play.jobs.Job$1.call(Job.java:66)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.UnsatisfiedLinkError: no xuggle in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at com.xuggle.ferry.JNILibraryLoader.loadLibrary0(JNILibraryLoader.java:268)
    at com.xuggle.ferry.JNILibraryLoader.loadLibrary(JNILibraryLoader.java:171)
    at com.xuggle.ferry.JNILibrary.load(JNILibrary.java:161)
    at com.xuggle.ferry.FerryJNI.<clinit>(FerryJNI.java:16)
    at com.xuggle.ferry.Ferry.<clinit>(Ferry.java:25)
    at com.xuggle.xuggler.XugglerJNI.<clinit>(XugglerJNI.java:19)
    at com.xuggle.xuggler.IContainer.<clinit>(IContainer.java:1622)
    at com.xuggle.mediatool.MediaReader.<init>(MediaReader.java:137)
    at com.xuggle.mediatool.ToolFactory.makeReader(ToolFactory.java:77)
    at logic.server.MediaCoder.createEncodingJobs(MediaCoder.java:39)
    at controllers.FileCopyJob$ProgressListener.actionPerformed(FileCopyJob.java:127)
    at controllers.FileCopyJob$DownloadCountingOutputStream.afterWrite(FileCopyJob.java:84)
    at org.apache.commons.io.output.ProxyOutputStream.write(ProxyOutputStream.java:92)
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1263)
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1236)
    at controllers.FileCopyJob.doJob(FileCopyJob.java:58)
    at play.jobs.Job.doJobWithResult(Job.java:50)
    at play.jobs.Job.call(Job.java:146)
    ... 8 more
4

2 に答える 2

2

問題は、バイナリを格納するために使用される一時ディレクトリです。他のインスタンスがこの一時的な場所を作成したため、別のユーザー名の 2 番目のプロセスにはアクセス権がありませんでした。開発者はこの問題を認識しています。一時ディレクトリを削除するか、権限を付与すると問題が解決します

于 2012-05-05T22:36:15.380 に答える
0

この質問はかなり古く、xuggle は廃止されましたが、ここのコメントを見て、この問題をどのように解決したかを他の人に示したいと思いました。

フォルダを削除したり、その権限を変更したりする代わりに、java.io.tmpdir プロパティを設定できます。

たとえば、次のようにします。

java -Djava.io.tmpdir="~/custom/tempdir/" HelloWorld

バックグラウンド:

別の回答からのコメントで示唆されているように、問題のルートを問題の一時フォルダーを作成する関数までさかのぼると、Java がカスタマイズ可能なデフォルトの場所を使用していることがわかります。

public static File createTempFile(String prefix,
                                  String suffix,
                                  File directory)
                           throws IOException

指定されたプレフィックスとサフィックス文字列を使用してその名前を生成し、指定されたディレクトリに新しい空のファイルを作成します。このメソッドが正常に返された場合、次のことが保証されます。

  1. 返された抽象パス名が示すファイルは、このメソッドが呼び出される前に存在しませんでした。
  2. このメソッドもそのバリアントも、現在の仮想マシンの呼び出しで同じ抽象パス名を返すことはありません。

[...]

directory 引数が null の場合、システム依存のデフォルトの一時ファイル ディレクトリが使用されます。デフォルトの一時ファイル ディレクトリは、システム プロパティ java.io.tmpdir によって指定されます。UNIX システムでは、このプロパティーのデフォルト値は通常、「/tmp」または「/var/tmp」です。Microsoft Windows システムでは、通常は「C:\WINNT\TEMP」です。Java 仮想マシンが呼び出されたときに、このシステム プロパティに別の値が指定される場合がありますが、このプロパティに対するプログラムによる変更が、このメソッドで使用される一時ディレクトリに影響を与えることは保証されていません。

見る:

  1. JavaDoc createTempFile(文字列、文字列、ファイル)
  2. 古い Google グループのディスカッション
于 2016-05-19T22:15:43.640 に答える