1

ファイルに対していくつかのランタイム サブプロセスを実行する Java アプリケーションに取り組んでいます。一部のファイルでエラーが発生したため、[エラー レポートを Microsoft に送信] ウィンドウが表示されます。このウィンドウをユーザーに表示せずに、プログラムでこのエラーを処理する必要があります。誰でも助けてください。

4

2 に答える 2

1

呼び出されている .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ため、これが問題になる場合は、レジストリ エントリを手動で編集する必要があることに注意してください。

于 2012-07-04T07:58:40.487 に答える
0

いつでも 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

于 2012-07-04T07:44:29.460 に答える