我的猜测是错误的,与答案无关。这个问题不再有效。看到了吗
my answer
. 对不起,这个问题问得不好。
加长版
我有一个应用程序需要重新启动自己(它只是需要,好吗?)。第一次,它创建一个文件,然后在那里序列化一个对象。这是通过一个
FileOutputStream
ObjectOutputStream
组合,如下所述:
private static File serializeBootstrapInfoIntoFile(
final BootstrapInfo info) throws IOException {
final File tempFile = File.createTempFile("BobBootstrapInfo", null);
final FileOutputStream fos = new FileOutputStream(tempFile);
final ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(info);
// just being thorough
oos.flush();
oos.close();
fos.flush();
fos.close();
return tempFile;
}
System.exec()
tempFile
作为系统属性。另一个java进程应该打开该文件,并反序列化包含的对象。第一个进程在派生的进程退出之前保持活动状态,因为它处理新进程的输出/错误流。
FileNotFoundException
在反序列化过程中(我已经用
file.exists()
当我事后手动检查时,文件确实存在。另外,如果手动运行传递给
System.exec()
,运行良好。因此,我猜第一个进程设法对新进程隐藏了文件,或者没有将文件真正写入文件系统,甚至流也被刷新和关闭。我也试过了
Thread.sleep(10000)
我做错什么了吗?或者这是Java的东西,或者OSX的东西(我用atm运行)?
对评论的答复
我运行的是OSX10.6.3,Java版本是1.6.0\u20。
这个
java
-classpath
/var/folders/dr/drDlHsguGvq0zF2Jtgn4S++++TI/-Tmp-/bob7168396245507677201.tmp:/Users/wolfie/Documents/workspace/Bob/dist/lib/junit.jar:/Users/wolfie/Documents/workspace/Bob/dist/lib/bob.jar
-Dcache.location="/var/folders/dr/drDlHsguGvq0zF2Jtgn4S++++TI/-Tmp-/BobBootstrapInfo4944987280015634213.tmp"
com.github.wolfie.bob.Bob
其中每一行都是字符串数组中的一个元素。这个
/var/folders/dr/drDlHsguGvq0zF2Jtgn4S++++TI/-Tmp-/BobBootstrapInfo4606780571989099166.tmp
-文件是一个被创建的,并且被另一个线程读取的文件。这个
envp
dir
论点是
null
.
整个stacktrace是:
Exception in thread "main" com.github.wolfie.bob.BootstrapError: java.io.FileNotFoundException: "/var/folders/dr/drDlHsguGvq0zF2Jtgn4S++++TI/-Tmp-/BobBootstrapInfo4606780571989099166.tmp" (No such file or directory)
at com.github.wolfie.bob.Bob.getBootstrapInfo(Bob.java:186)
at com.github.wolfie.bob.Bob.run(Bob.java:138)
at com.github.wolfie.bob.Bob.main(Bob.java:95)
Caused by: java.io.FileNotFoundException: "/var/folders/dr/drDlHsguGvq0zF2Jtgn4S++++TI/-Tmp-/BobBootstrapInfo4606780571989099166.tmp" (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:106)
at com.github.wolfie.bob.Bob.deserializeBootstrapInfoFromFile(Bob.java:265)
at com.github.wolfie.bob.Bob.getBootstrapInfo(Bob.java:184)
... 2 more