2009-04-22 8 views

答えて

28
URL main = Main.class.getResource("Main.class"); 
if (!"file".equalsIgnoreCase(main.getProtocol())) 
    throw new IllegalStateException("Main class is not stored in a file."); 
File path = new File(main.getPath()); 

注意。ただし、この手法ではクラスを含むJARを見つけることができ、クラスファイルがgetResource()の代わりにgetResourceAsStream()に置き換えられてクラスファイルの内容を取得することができ、クラスがファイルシステム上にあるかどうかで動作しますJAR

0

http://www.cs.caltech.edu/courses/cs11/material/java/donnie/java-main.htmlによると、しかし、私は少なくともあなたにメインのクラスを与える$0 (Program Name) in Java? Discover main class?を読むことをお勧めします。これはすべての場合(したがってIllegalStateException)で動作しませんので、ほとんどのクラスファイルはJARファイルにまとめられ

+0

'main'メソッドの中で、囲むクラスは既に知られています。 – erickson

0

何が必要ですか?同じディレクトリにあるファイルをすべて取得する必要がある場合は、Class.getResourceAsStream()が対象です。

+1

私のアプリケーションの起動を複数回停止するために、メインクラスファイルのロックを取得しようとしています。 –

0

これは私のエンドユーザーの問題のように見えます。また、特定のアプリケーションの複数のインスタンスを実行する可能性があることを考慮し、ユーザーがそうするのを妨げることは大きな迷惑になるでしょう。

問題が一時ファイルの競合である場合は、すべての一時ファイルに一意の名前が付いていることを確認してください。これは、理解しているように、アプリケーションの複数のインスタンスが実行されないようにする必要性を人々が感じる最も一般的な理由です。

P .: java.io.File.createTempFile()メソッドは、一意のファイル名を自動的に生成するため、一時的なファイルの競合を防ぐのに適しています。

関連する問題