ファイルに対していくつかのランタイム サブプロセスを実行する Java アプリケーションに取り組んでいます。一部のファイルでエラーが発生したため、[エラー レポートを Microsoft に送信] ウィンドウが表示されます。このウィンドウをユーザーに表示せずに、プログラムでこのエラーを処理する必要があります。誰でも助けてください。
2 に答える
呼び出されている .exe を報告する Windows エラーを抑制するには、未処理の例外で終了するべきではありません。これは、アプリケーションのソースにアクセスできる場合にのみ機能します。
WER リファレンスに基づいて- Win32 API 呼び出しWerAddExcludedApplicationを使用して、無視する予定の特定の .exe ファイルをユーザーごとの無視リストに追加する必要があります。名前を無視リストに追加します。その後、アプリケーションを呼び出してもエラーは発生しません。
同様に、別のアプリケーションを作成して、WerRemoveExcludedApplicationを使用してそれらを削除できます。
代わりに、JNI/JNA を使用してクラスを作成し、この機能をカプセル化することです。Runtime.exec
これは、JNI の単純なバージョンであるJava Native Access (JNA)を使用した単純な例です(ほとんどの場合、C++ は必要ありません)。jna.jar をダウンロードして、プロジェクトの一部にします。
import com.sun.jna.Native;
import com.sun.jna.WString;
import com.sun.jna.win32.StdCallLibrary;
public class JNATest {
public interface CLibrary extends StdCallLibrary {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("wer.dll",
CLibrary.class);
int WerAddExcludedApplication(WString name, boolean global);
int WerRemoveExcludedApplication(WString name, boolean global);
}
public static void main(String[] args) {
CLibrary.INSTANCE.WerAddExcludedApplication(new WString("C:\\foo.exe"), false);
CLibrary.INSTANCE.WerRemoveExcludedApplication(new WString("C:\\foo.exe"), false);
}
}
基本的に、新しいWString(...)
値を、無視するアプリケーションの名前に置き換えます。その時点での Windows エラー報告の目的では無視する必要があります。
は Windows Vista 以降にのみ搭載されているwer.dll
ため、これが問題になる場合は、レジストリ エントリを手動で編集する必要があることに注意してください。
いつでも try-catch-finally ステートメントを使用できます。
try
{
some code here (the code that is causing the error);
}
catch (Exception x)
{
handle exception here;
}
わたしにはできる...
編集ここに、もう少し役立つリンクがあります。
http://www.exampledepot.com/egs/Java%20Language/TryCatch.html