未报告的异常java.io.IOException必须被捕获或声明为抛出。

3
这个编译错误是什么意思,我该如何解决它?编译器将错误指向第86行。
final PiFace piface = new PiFaceDevice(PiFace.DEFAULT_ADDRESS, Spi.CHANNEL_0);

并告诉我。
unreported exception java.io.ioexception must be caught or declared to be thrown

这是否与需要尝试/捕获有关?因为这是我在搜索中找到的最佳答案,但我不太确定如何实现它。我尝试了一下,但它只产生了更多的错误(你可以看到它被注释掉了)。

完整的代码如下:

public class Relay1 extends javax.swing.JFrame {

    public Relay1() {
        initComponents();
    }

    private void initComponents() {
        // stuff that doesn't matter...
    }


    //try{
        final PiFace piface = new PiFaceDevice(PiFace.DEFAULT_ADDRESS, Spi.CHANNEL_0);
    //}catch(IOException e){
        //System.out.println("Something went wrong...");
    //}


    public static void main(String args[]) throws InterruptedException, IOException {        
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Relay1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Relay1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Relay1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Relay1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Relay1().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    // End of variables declaration//GEN-END:variables
}

3
你真的需要发布所有的代码吗?是的,这与“try-catch”和“throws”有关。 - Sotirios Delimanolis
取消try/catch的注释后,您会收到什么错误? - takendarkk
我认为几乎所有的内容都与问题无关,但是哪些部分不确定。 - Suipaste
啊,又是Java的受检异常的受害者。这是一种旨在帮助初学者的语言特性,实际上却迫使初学者犯错误。 - Marko Topolnik
2个回答

3

对于您的已检查异常,实际上没有可以提供的处理代码。如果该异常仅传递给调用者,在这种情况下就是编写new Relay1()的地方,那么这将是完全可以接受的。为了实现这一点,请按照以下方式编写:

final PiFace piface; { 
  try {
    piface = new PiFaceDevice(PiFace.DEFAULT_ADDRESS, Spi.CHANNEL_0);
  } catch(IOException e) { 
    throw new RuntimeException("Failed to create Pi Face Device", e); 
  }
}

这将使你既能保留异常中的诊断信息,又能满足编译器的要求。

这似乎是目前为止最全面的答案。然而,引入了两个新错误:找不到符号(这是在catch IOExeption处) 符号:类IOExeption 位置:类relay.Relay1找不到符号(这是在RuntimeExeption处) 符号:类RuntimeExeption 位置:类relay.Relay1 - Suipaste
1
这是一个完全无关的问题。通过添加适当的导入语句,让NetBeans来解决它。 - Marko Topolnik
好的,谢谢。我在树莓派上使用轻量级IDE进行小的编辑。我会将其传输回我的主机器以进行其他编辑。 - Suipaste
哦,等等,我刚意识到我已经有那个导入了。请检查上面的代码(在你编辑之前)。 - Suipaste
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/45217/discussion-between-stephen-talbot-and-marko-topolnik - Suipaste
显示剩余2条评论

0

在try块之前声明您的PIFace,然后用try { }包围其初始化,并紧接着放置一个catch块来处理异常。如果您只是将其放在try块中而没有先进行初始化,则该变量的作用域仅限于该块。因此,请执行以下操作:

PiFace piface;
try{
   piface = new PiFaceDevice(PiFace.DEFAULT_ADDRESS, Spi.CHANNEL_0);
   }
   {catch(Exception e) {
      e.printStackTrace();
   }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接