0

システムのMACアドレスを取得しています。そのために使用する必要があります

public static void main(String args[])throws Exception {

しかし、何らかの理由で、誰かが特定のボタンを押したときにそのコードを移動したいのです。コードをコピーできますが、できません

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) throws Exception

それはシステムサウンドを与え、ラインは編集できないように見えますが、

コードでこれを使用していますEnumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();

ここに私のメインコードがあります:

String[] macArray = new String[1000];
      macArray[0] = "74 E5 43 23 F1 B4 ";
      macArray[1] = "74 E5 43 24 5F 18 ";
      int i=0;
      String[] current = new String[1000];

     Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();

    while (interfaces.hasMoreElements())
    {
      NetworkInterface nif = interfaces.nextElement();
      byte[] lBytes = nif.getHardwareAddress();
      StringBuffer lStringBuffer = new StringBuffer();

      if (lBytes != null)
      {
        for (byte b : lBytes)
        {
          lStringBuffer.append(String.format("%1$02X ", new Byte(b)));
        }
      }
      current[i]=lStringBuffer.toString();
      System.out.println(lStringBuffer);
      i++;

      //System.out.println(lStringBuffer)
    }

    for(; i<1000; i++){
        current[i]= "" + 0;
    }
    int te=0;
    for(int j=0; j<1000; j++){
        for(int k=0; k<1000; k++){
            if(current[j].equals(macArray[k])){
                System.out.println("WOW!!!");
                te=1;
            }
        }
        //System.out.println(current[j]);
    }
    if(te!=1){
               JOptionPane.showMessageDialog(null,"Error");
        System.exit(0);

    }
4

1 に答える 1

0

throwsオーバーライドするメソッドの句を変更することはできません。基本インターフェイスはチェック済み例外を宣言していないため、派生クラスは契約に違反せずにそれらを突然スローし始めることはできません。あなたが名前を付けたプライベートメソッドは、それ自体ではそのようなメソッドをオーバーライドしませんが、コードのどこかに を実装するネストされたコールバッククラスがあるようでActionListener、どうやらあなたのIDEはあなたがそれでうまくいくようにしています。

基本的に2つの解決策があります。どちらも、コールバック内で例外をキャッチすることから始まります。次に、たとえばエラー メッセージを表示したり、アプリケーションを終了したりするなど、適切な処理を試みることができます。君による。最小限の解決策は次のようになります。

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        // do stuff
    }
    catch (Exception e) {
        e.printStackTrace();
        // ignore error otherwise, if we can safely do so.
    }
}

例外をそのコールバックの外で確実にポップアップさせたい場合は、それをチェックされていない例外、つまりから派生した例外にラップする必要があります。RuntimeException. 目的のために独自のサブクラスを作成します。非チェック例外は、宣言しなくてもコードを通過できます。最終的にその例外をキャッチするように、特に注意する必要があります。それ以上のアクションがなければ、AWT GUI スレッドのデフォルトの例外ハンドラーは単にスタック トレースを出力し、例外を無視します。コードが予期しないスタックの巻き戻しや部分的に実行されたメソッドを適切に処理するように記述されていない限り、アプリケーションが一貫性のない状態のままになる可能性があるため、これは危険です。また、スタック トレースだけが必要な場合は、ハンドラー自体から出力する方がはるかにクリーンです。他のことを行うには、そのスレッド(おそらく 経由で取得) またはすべてのスレッドのデフォルトの例外ハンドラーを変更する必要がありますEventQueue.invokeAndWait

于 2013-10-02T01:41:52.750 に答える