我得到以下异常。有人请帮我解决这个问题。我在netbeans 8 IDE中执行它。 jdk 7(32位)。我正在尝试在TextArea中显示控制台输出。
错误:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - unreported exception java.lang.Exception; must be caught or declared to be thrown
at NewJFrame.captureActionPerformed(NewJFrame.java:127)
at NewJFrame.access$000(NewJFrame.java:22)
at NewJFrame$1.actionPerformed(NewJFrame.java:66)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 12 seconds)
消息来源代码:
import jpcap.*;
import jpcap.NetworkInterface;
import java.io.IOException;
import jpcap.packet.DatalinkPacket;
import jpcap.packet.EthernetPacket;
import jpcap.packet.ICMPPacket;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
import jpcap.packet.TCPPacket;
import jpcap.packet.UDPPacket;
/**
*
* @author Rahul
*/
public class NewJFrame extends javax.swing.JFrame implements PacketReceiver {
static NetworkInterface [] devices;
static int j = 0;
int interface_index;
String protocoll[] = {"HOPOPT", "ICMP", "IGMP", "GGP", "IPV4", "ST", "TCP", "CBT", "EGP", "IGP", "BBN", "NV2", "PUP", "ARGUS", "EMCON", "XNET", "CHAOS", "UDP", "mux"};
/**
* Creates new form NewJFrame
*/
public NewJFrame() {
initComponents();
devices = JpcapCaptor.getDeviceList();
for (int i = 0; i < devices.length; i++)
{
result.append(i + " :" + devices[i].name + "(" + devices[i].description + ")\n");
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
capture = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
result = new javax.swing.JTextArea();
select = new javax.swing.JButton();
indexx = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Packet Analyzer");
capture.setText("CAPTURE");
capture.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
captureActionPerformed(evt);
}
});
jButton2.setText("STOP");
result.setColumns(20);
result.setRows(5);
jScrollPane1.setViewportView(result);
select.setText("Select");
select.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
selectActionPerformed(evt);
}
});
jLabel1.setText("Enter device index:");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(52, 52, 52)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 596, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(88, 88, 88)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(indexx))
.addGap(18, 18, 18)
.addComponent(select)
.addGap(113, 113, 113)
.addComponent(capture)
.addGap(74, 74, 74)
.addComponent(jButton2)))
.addGap(58, 58, 58))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(26, 26, 26)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 32, Short.MAX_VALUE)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(capture)
.addComponent(jButton2)
.addComponent(select)
.addComponent(indexx, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(41, 41, 41))
);
pack();
}// </editor-fold>
private void captureActionPerformed(java.awt.event.ActionEvent evt) {
capturepacket();
}
public void capturepacket() throws Exception {
JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[2], 2000, true, 20);
jpcap.loopPacket(-1, new NewJFrame());
}
private void selectActionPerformed(java.awt.event.ActionEvent evt) {
interface_index = Integer.parseInt(indexx.getText());
result.setText(" ");
}
public void receivePacket(Packet packet)
{
result.append(packet + "\n");
result.append("this is packet " + j + " :" + "\n");
j++;
IPPacket tpt=(IPPacket)packet;
if (packet != null)
{
int ppp=tpt.protocol;
String proto=protocoll[ppp];
result.append("about the ip packet in network layer : \n");
result.append("\n******************************************************************");
if(tpt.dont_frag)
{
result.append("\ndft bi is set. packet will not be fragmented \n");
}
else
{
result.append("\ndft bi is not set. packet will be fragmented \n");
}
result.append("\n \n destination ip is :"+tpt.dst_ip);
result.append("\n\n this is source ip :"+tpt.src_ip);
result.append("\n\n this is hop limit :"+tpt.hop_limit);
result.append("\n \n this is identification field :"+tpt.ident);
result.append("\n \npacket length :"+tpt.length);
result.append("\n\n packet priority :"+(int)tpt.priority);
result.append("\ntype of service field"+tpt.rsv_tos);
if(tpt.r_flag)
{
result.append("\nreleiable transmission");
}
else
{
result.append("\nnot reliable");
}
result.append("\nprotocol version is : "+(int)tpt.version);
result.append("\nflow label field"+tpt.flow_label);
result.append("\n**********************************************************************");
result.append("\ndatalink level analysis");
result.append("\n********************************************************************");
DatalinkPacket dp = packet.datalink;
EthernetPacket ept=(EthernetPacket)dp;
result.append("\nthis is destination mac address :"+ept.getDestinationAddress());
result.append("\n this is source mac address"+ept.getSourceAddress());
System.out.println("*********************************************************************");
result.append("\nthis is about type of packet");
result.append("\n******************************************************************************");
if (proto.equals(("TCP"))) {
result.append(" /n this is TCP packet");
TCPPacket tp = (TCPPacket) packet;
result.append("\nthis is destination port of tcp :" + tp.dst_port);
if (tp.ack) {
result.append("\n" + "this is an acknowledgement");
} else {
result.append("\nthis is not an acknowledgment packet");
}
if (tp.rst) {
result.append("\nreset connection ");
}
result.append(" \n protocol version is :" + tp.version);
result.append("\n this is destination ip " + tp.dst_ip);
result.append("\nthis is source ip"+tp.src_ip);
if(tp.fin){
result.append("\nsender does not have more data to transfer");
}
if(tp.syn){
result.append("\n request for connection");
}
}else if(proto.equals("ICMP")){
ICMPPacket ipc=(ICMPPacket)packet;
// java.net.InetAddress[] routers=ipc.router_ip;
//for(int t=0;t
// System.out.println("\n"+routers[t]);
// }
result.append(" \n this is alive time :"+ipc.alive_time);
result.append("\n number of advertised address :"+(int)ipc.addr_num);
result.append("mtu of the packet is :"+(int)ipc.mtu);
result.append("subnet mask :"+ipc.subnetmask);
result.append("\n source ip :"+ipc.src_ip);
result.append("\n destination ip:"+ipc.dst_ip);
result.append("\n check sum :"+ipc.checksum);
result.append("\n icmp type :"+ipc.type);
result.append("");
}else if(proto.equals("UDP")){
UDPPacket pac=(UDPPacket)packet;
result.append("\nthis is udp packet \n");
result.append("\nthis is source port :"+pac.src_port);
result.append("\nthis is destination port :"+pac.dst_port);
}
result.append("\n******************************************************");
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
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(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton capture;
private javax.swing.JTextField indexx;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
public static javax.swing.JTextArea result;
private javax.swing.JButton select;
// End of variables declaration
}
答案 0 :(得分:1)
错误信息非常清楚:
未报告的异常java.lang.Exception;必须被抓住或宣布被抛出
您正在调用一个抛出已检查异常的方法Exception
,但是您从没有捕获它的代码中调用它,并且没有报告该异常它(调用代码)抛出它。有关详细信息,请参阅Oracle Java站点上的this tutorial,但基本上这只是一个简单的案例:
假设您需要调用方法foo
,并且声明如下:
void foo()
throws Exception {
// ...
}
这表示foo
中的代码可能会抛出异常Exception
。现在,假设我们有这个方法bar
:
void bar() {
this.foo(); // Problem
}
bar
并不会说它会引发Exception
,但它会调用foo
而不会将该调用包含在try/catch
中,以捕获foo
的异常说它可能会抛出。 bar
要么需要捕获异常并处理它:
void bar() {
try {
this.foo();
}
catch (Exception e) {
// Handle the exception appropriately
}
}
...或声明bar
可能抛出异常:
void bar()
throws Exception {
this.foo(); // Problem
}
答案 1 :(得分:0)
您需要捕获captureActionPerformed
电话周围的异常。使用try-catch
结构:
public void actionPerformed(java.awt.event.ActionEvent evt) {
try {
captureActionPerformed(evt);
} catch (Exception e) {
e.printStackTrace();
//and other clean-up tasks
}
}
请注意引发异常的行为,并为您的方法做好准备。
答案 2 :(得分:0)
在此功能中:
private void captureActionPerformed(java.awt.event.ActionEvent evt) {
capturepacket();
}
您致电capturepacket();
。但是,此函数可能会抛出异常,因此对于您的代码编译,您将需要使用try-catch块包围调用,或者声明captureActionPerformed
依次抛出Exception
。请记住,您需要进一步管理此异常,直到最终将其捕获到某处。