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 确保您可以很好地使用它。

你基本上有两个解决方案。两者都从在回调中捕获异常开始。然后,您可以尝试合理地处理该问题,例如通过显示错误消息,甚至终止应用程序。由你决定。最小的解决方案是这样的:

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 回答