[英]Please help me sort out this Exception In JAVA
I am getting following exception. 我正在跟踪异常。 Anyone please help me solve this problem.
有人请帮我解决这个问题。 I am Executing it in netbeans 8 IDE.
我正在netbeans 8 IDE中执行它。 jdk 7 (32 bit).I'm trying to display the console output in a TextArea.
jdk 7(32位)。我正在尝试在TextArea中显示控制台输出。
errors: 错误:
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)
SOURCE CODE: 源代码:
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
}
The error message is fairly clear: 错误消息非常清楚:
unreported exception java.lang.Exception;
未报告的异常java.lang.Exception; must be caught or declared to be thrown
必须被抓住或宣布被抛出
You're calling a method that throws a checked exception, Exception
, but you're calling it from code that doesn't catch it, and doesn't report that it (the calling code) throws it. 您正在调用的方法将抛出一个已检查的异常
Exception
,但是您是从无法捕获该Exception
代码中调用该方法,并且不会报告该异常(调用代码)将其引发。 See this tutorial on the Oracle Java site for details, but basically here's a simple case: 有关详细信息,请参见Oracle Java网站上的本教程 ,但是基本上这是一个简单的情况:
Suppose you need to call the method foo
and it's declared like this: 假设您需要调用方法
foo
,它的声明如下:
void foo()
throws Exception {
// ...
}
That says that the code in foo
may throw the exception Exception
. 那就是说
foo
中的代码可能会抛出Exception
。 Now, suppose we have this method bar
: 现在,假设我们有以下方法
bar
:
void bar() {
this.foo(); // Problem
}
bar
doesn't say it throws Exception
, but it calls foo
without wrapping that call in a try/catch
that catches the exception that foo
says it may throw. bar
不会说它抛出Exception
,但是它会调用foo
而不将其包装在try/catch
,而try/catch
会捕获foo
可能抛出的异常。 bar
either needs to catch the exception and handle it: bar
要么需要捕获异常并处理它:
void bar() {
try {
this.foo();
}
catch (Exception e) {
// Handle the exception appropriately
}
}
...or declare that bar
may throw the exception: ...或声明
bar
可能引发异常:
void bar()
throws Exception {
this.foo(); // Problem
}
You need to catch an exception thrown around your captureActionPerformed
call. 您需要捕获在
captureActionPerformed
调用周围引发的异常。 Use the try-catch
structure: 使用
try-catch
结构:
public void actionPerformed(java.awt.event.ActionEvent evt) {
try {
captureActionPerformed(evt);
} catch (Exception e) {
e.printStackTrace();
//and other clean-up tasks
}
}
Just be aware of actions that throw exceptions and be prepared for your methods to catch them. 只是要注意引发异常的动作,并为您的方法做好准备以捕获异常。
In this function: 在此功能中:
private void captureActionPerformed(java.awt.event.ActionEvent evt) {
capturepacket();
}
You call capturepacket();
您调用
capturepacket();
. 。 However this function may throw Exception and thus for your code to compile you will either have to surround the call with a try-catch block or declare
captureActionPerformed
to throw Exception
in turn. 但是,此函数可能会引发Exception,因此要编译代码,您将必须用try-catch块将调用包围起来,或者声明
captureActionPerformed
依次引发Exception
。 Keep in mind you will then need to further manage this exception until eventually you catch it somewhere. 请记住,然后您将需要进一步管理此异常,直到最终将其捕获到某个地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.