- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在给定的代码中,swingworker 线程将捕获数据包,将其字段封装到一个字符串数组中,然后将该字符串数组作为一行添加到 GUI 的 jtable 中。我的 JTable 遵循 AbstractTableModel。我用新数据手动复制 JTable 中的旧数据,然后使用 FireTableDataChanged() 方法,以便更改反射(reflect)在 GUI 的表中。但是 GUI 表仍然是空白的。我无法使用新数据更新我的 JTable。我也尝试使用 DefaultTableModel 但结果相同。
/************ *CaptureThread 类******** ******/
package TestClasses;
import javax.swing.*;
import javax.swing.table.*;
import jpcap.*;
import jpcap.packet.*;
public class CaptureThread extends SwingWorker<Void,String[]>
{
JTable capture_tab;
CaptureTableModel model;
JpcapCaptor capture;
CaptureThread(JpcapCaptor capture,CaptureTableModel model,JTable capture_tab)
{
this.capture = capture;
this.model = model;
this.capture_tab = capture_tab;
}
public Void doInBackground()
{
int pkt_count = 0,i=0;
jpcap.packet.Packet p;
ARPPacket arp_pkt;
IPPacket ip_pkt;
TCPPacket tcp_pkt;
UDPPacket udp_pkt;
EthernetPacket eth_pkt;
String new_pkt[] = new String[10];
while(!isCancelled())
{
p = capture.getPacket();
eth_pkt =(EthernetPacket)p.datalink;
new_pkt[0] = Integer.toString(++pkt_count);
new_pkt[1] = Long.toString(p.sec);
new_pkt[2] = eth_pkt.getSourceAddress();
new_pkt[5] = eth_pkt.getSourceAddress();
if(eth_pkt.frametype==EthernetPacket.ETHERTYPE_ARP)
{
System.out.println("ARP packet");
arp_pkt = (ARPPacket)p;
new_pkt[3] = "--";
new_pkt[4] = arp_pkt.sender_protoaddr.toString();
new_pkt[6] = "--";
new_pkt[7] = arp_pkt.target_protoaddr.toString();
new_pkt[8] = "ARP";
new_pkt[9] = "--";
}
else
{
System.out.println("IP packet");
ip_pkt = (IPPacket)p;
new_pkt[3] = ip_pkt.src_ip.toString();
new_pkt[6] = ip_pkt.dst_ip.toString();
switch(ip_pkt.protocol)
{
case IPPacket.IPPROTO_ICMP:
new_pkt[4] = "--";
new_pkt[7] = "--";
new_pkt[8] = "ICMP";
System.out.println("ICMP packet");
break;
case IPPacket.IPPROTO_TCP:
tcp_pkt = (TCPPacket)ip_pkt;
new_pkt[4] = Integer.toString(tcp_pkt.src_port);
new_pkt[7] = Integer.toString(tcp_pkt.dst_port);
new_pkt[8] = "TCP";
System.out.println("TCP packet");
break;
case IPPacket.IPPROTO_UDP:
udp_pkt = (UDPPacket)ip_pkt;
new_pkt[4] = Integer.toString(udp_pkt.src_port);
new_pkt[7] = Integer.toString(udp_pkt.dst_port);
new_pkt[8] = "UDP";
System.out.println("UDP packet");
break;
}
new_pkt[9] = Integer.toString(ip_pkt.hop_limit);
publish(new_pkt);
}
}
return null;
}
public void process(String str[])
{
model.addPacket(str);
model.fireTableDataChanged();
}
}
/************ *******MainWin 类** *********/
package TestClasses;
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import jpcap.*;
import jpcap.packet.*;
public class MainWin extends javax.swing.JFrame implements ActionListener
{
/** Creates new form Temp */
public MainWin() {
initComponents();
}
/** 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">//GEN-BEGIN:initComponents
private void initComponents() {
model = new CaptureTableModel(packet,columnNames);
capture_tab = new JTable(model);
dev = new SystemInterfaces();
str = dev.getInterfaceList();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
ipaddr_field = new javax.swing.JTextField();
interface_combo = new javax.swing.JComboBox();
promiscuous = new javax.swing.JCheckBox();
jLabel3 = new javax.swing.JLabel();
jComboBox1 = new javax.swing.JComboBox();
start_button = new javax.swing.JButton();
stop_button = new javax.swing.JButton();
clear_button = new javax.swing.JButton();
save_button = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
menu1 = new javax.swing.JMenu();
file_item1 = new javax.swing.JMenuItem();
file_item2 = new javax.swing.JMenuItem();
file_item3 = new javax.swing.JMenuItem();
file_item4 = new javax.swing.JMenuItem();
menu2 = new javax.swing.JMenu();
menu3 = new javax.swing.JMenu();
capture_item1 = new javax.swing.JMenuItem();
capture_item2 = new javax.swing.JMenuItem();
capture_item3 = new javax.swing.JMenuItem();
menu4 = new javax.swing.JMenu();
help_item1 = new javax.swing.JMenuItem();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setBackground(java.awt.Color.black);
setTitle("Packet Tracer Tool");
jLabel1.setBackground(java.awt.Color.black);
jLabel1.setFont(new java.awt.Font("Times New Roman", 0, 14));
jLabel1.setForeground(java.awt.Color.white);
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("Interface:");
jLabel1.setToolTipText("Select any interface from the list");
interface_combo.setBackground(java.awt.Color.gray);
interface_combo.setForeground(java.awt.Color.white);
interface_combo.setModel(new javax.swing.DefaultComboBoxModel(str));
interface_combo.addActionListener(this);
interface_combo.setActionCommand("select_interface");
jLabel2.setBackground(java.awt.Color.black);
jLabel2.setFont(new java.awt.Font("Times New Roman", 0, 14));
jLabel2.setForeground(java.awt.Color.white);
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel2.setText("IP Address:");
jLabel2.setToolTipText("IP Address of the selected interface");
ipaddr_field.setBackground(java.awt.Color.gray);
ipaddr_field.setEditable(false);
ipaddr_field.setFont(new java.awt.Font("Times New Roman", 0, 14));
ipaddr_field.setForeground(java.awt.Color.white);
ipaddr_field.setHorizontalAlignment(javax.swing.JTextField.CENTER);
ipaddr_field.setText(dev.getInterfaceIPAddr(interface_combo.getSelectedIndex()));
promiscuous.setBackground(java.awt.Color.gray);
promiscuous.setFont(new java.awt.Font("Times New Roman", 0, 14));
promiscuous.setForeground(java.awt.Color.white);
promiscuous.setSelected(true);
promiscuous.setText("Promiscuous Mode");
promiscuous.setToolTipText("Check if you want to enable promiscuous mode");
jLabel3.setBackground(java.awt.Color.black);
jLabel3.setFont(new java.awt.Font("Times New Roman", 0, 14));
jLabel3.setForeground(java.awt.Color.white);
jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel3.setText("Filter: ");
jLabel3.setToolTipText("Select a filter to apply");
jComboBox1.setBackground(java.awt.Color.gray);
jComboBox1.setFont(new java.awt.Font("Times New Roman", 0, 14));
jComboBox1.setForeground(java.awt.Color.white);
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
capture_tab.setBackground(java.awt.Color.lightGray);
capture_tab.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 2));
capture_tab.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
capture_tab.setForeground(java.awt.Color.white);
capture_tab.setPreferredScrollableViewportSize(new Dimension(500,70));
capture_tab.setFillsViewportHeight(true);
scroll = new javax.swing.JScrollPane(capture_tab);
start_button.setBackground(java.awt.Color.gray);
start_button.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
start_button.setForeground(java.awt.Color.white);
start_button.setText("START");
start_button.setToolTipText("Start capture on the selected interface");
start_button.addActionListener(this);
start_button.setActionCommand("start");
stop_button.setBackground(java.awt.Color.gray);
stop_button.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
stop_button.setForeground(java.awt.Color.white);
stop_button.setText("STOP");
stop_button.setToolTipText("Stop capture");
stop_button.setText("STOP");
stop_button.setActionCommand("stop");
clear_button.setBackground(java.awt.Color.gray);
clear_button.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
clear_button.setForeground(java.awt.Color.white);
clear_button.setText("CLEAR");
clear_button.setToolTipText("Clear capture table");
save_button.setBackground(java.awt.Color.gray);
save_button.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
save_button.setForeground(java.awt.Color.white);
save_button.setText("SAVE");
save_button.setToolTipText("Save captured packets to a file");
menu1.setText("File");
file_item1.setText("Open");
menu1.add(file_item1);
file_item2.setText("Save");
menu1.add(file_item2);
file_item3.setText("Save as");
menu1.add(file_item3);
file_item4.setText("Exit");
menu1.add(file_item4);
jMenuBar1.add(menu1);
menu2.setText("Edit");
jMenuBar1.add(menu2);
menu3.setText("Capture");
capture_item1.setText("Interface");
menu3.add(capture_item1);
capture_item2.setText("Start");
menu3.add(capture_item2);
capture_item3.setText("Stop");
menu3.add(capture_item3);
jMenuBar1.add(menu3);
menu4.setText("Help");
help_item1.setText("About");
menu4.add(help_item1);
jMenuBar1.add(menu4);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(scroll, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 740, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jLabel1)
.addComponent(jLabel3))
.addGap(31, 31, 31)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ipaddr_field, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(interface_combo, 0, 643, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jComboBox1, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(promiscuous, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(start_button, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(36, 36, 36)
.addComponent(stop_button, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(35, 35, 35)
.addComponent(clear_button, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(36, 36, 36)
.addComponent(save_button, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(interface_combo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(ipaddr_field, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(promiscuous)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(scroll, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(49, 49, 49)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(start_button, javax.swing.GroupLayout.DEFAULT_SIZE, 28, Short.MAX_VALUE)
.addComponent(stop_button, javax.swing.GroupLayout.DEFAULT_SIZE, 28, Short.MAX_VALUE)
.addComponent(clear_button, javax.swing.GroupLayout.DEFAULT_SIZE, 28, Short.MAX_VALUE)
.addComponent(save_button, javax.swing.GroupLayout.DEFAULT_SIZE, 28, Short.MAX_VALUE))
.addGap(111, 111, 111))
);
pack();
}// </editor-fold>//GEN-END:initComponents
public void actionPerformed(ActionEvent e)
{
String action;
action = e.getActionCommand();
if(action.equals("start"))
{
capture = dev.openInterface(dev.getInterfaceByIndex(interface_combo.getSelectedIndex()),promiscuous.isSelected());
capture_thread = new CaptureThread(capture,model,capture_tab);
capture_thread.execute();
}
if(action.equals("stop"))
{
capture_thread.cancel(true);
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainWin().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private CaptureThread capture_thread;
private SystemInterfaces dev;
private String str[] = null;
private CaptureTableModel model;
private JpcapCaptor capture;
private javax.swing.JMenuItem capture_item1;
private javax.swing.JMenuItem capture_item2;
private javax.swing.JMenuItem capture_item3;
private javax.swing.JTable capture_tab;
private javax.swing.JButton clear_button;
private javax.swing.JMenuItem file_item1;
private javax.swing.JMenuItem file_item2;
private javax.swing.JMenuItem file_item3;
private javax.swing.JMenuItem file_item4;
private javax.swing.JMenuItem help_item1;
private javax.swing.JComboBox interface_combo;
private javax.swing.JTextField ipaddr_field;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JScrollPane scroll;
private javax.swing.JMenu menu1;
private javax.swing.JMenu menu2;
private javax.swing.JMenu menu3;
private javax.swing.JMenu menu4;
private javax.swing.JCheckBox promiscuous;
private javax.swing.JButton save_button;
private javax.swing.JButton start_button;
private javax.swing.JButton stop_button;
private String[][] packet = {{"#","#","#","#","#","#","#","#","#","#"}};
private String[] columnNames = {"Sr. No.", "Time", "src MAC", "src IP", "src Port", "dest MAC", "dest IP", "dest Port", "Protocol", "TTL"};
// End of variables declaration//GEN-END:variables
}
/************************************CaptureTableModel*********************/
package TestClasses;
import javax.swing.table.*;
public class CaptureTableModel extends AbstractTableModel
{
String packet[][],columnNames[];
CaptureTableModel(String[][] packet,String[] columnNames)
{
this.packet = packet;
this.columnNames = columnNames;
}
public int getColumnCount()
{
return columnNames.length;
}
public int getRowCount()
{
return packet.length;
}
public String getColumnName(int index)
{
return columnNames[index];
}
public Object getValueAt(int row,int col)
{
return packet[row][col];
}
public Object[] getRow(int index)
{
return packet[index];
}
public void addPacket(String p[])
{
String temp[][] = new String[getRowCount()+1][getColumnCount()];
System.arraycopy(packet,0,temp,0,packet.length);
temp[getRowCount()] = p;
packet = temp;
}
}
最佳答案
我无法运行你的代码,但我相信你的处理方法应该接受一个字符串数组列表作为参数,然后在其中有一个 for 循环,你可以在其中迭代列表,将字符串数组添加到循环内的模型中.如果添加@Override 注释,我想知道编译器是否会提示 process 没有真正覆盖 super 方法。也许是这样的:
@Override // don't forget this!
public void process(List<String[]> chunks) {
for(int i = 0; i < chunks.size(); i++) {
model.addPacket(chunks.get(i));
model.fireTableDataChanged();
}
}
请注意,代码尚未经过测试。
关于Java Swing - 更新 JTable 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6655141/
我的应用程序从一个有 5 个选项卡的选项卡栏 Controller 开始。一开始,第一个出现了它的名字,但其他四个没有名字,直到我点击它们。然后根据用户使用的语言显示名称。如何在选项卡栏出现之前设置选
我有嵌套数组 json 对象(第 1 层、第 2 层和第 3 层)。我的问题是数据表没有出现。任何相关的 CDN 均已导入。该表仅显示部分。我引用了很多网站,但都没有解决我的问题。 之前我使用标准表来
我正在尝试设置要显示的 Parse PFLoginViewController。这是我的一个 View Controller 的类。 import UIKit import Parse import
我遇到了这个问题,我绘制的对象没有出现在 GUI 中。我知道它正在被处理,因为数据被推送到日志文件。但是,图形没有出现。 这是我的一些代码: public static void main(Strin
我有一个树状图,其中包含出现这样的词...... TreeMap occurrence = new TreeMap (); 字符串 = 单词 整数 = 出现次数。 我如何获得最大出现次数 - 整数,
因此,我提示用户输入变量。如果变量小于 0 且大于 10。如果用户输入 10,我想要求用户再次输入数字。我问时间的时候输入4,它说你输入错误。但在第二次尝试时效果很好。例如:如果我输入 25,它会打印
我已经用 css overflow 属性做了一个例子。在这个例子中我遇到了一个溢出滚动的问题。滚动条出现了,但没有工作意味着每当将光标移动到滚动条时,在这个滚动条不活动的时间。我对此一无所知,所以请帮
我现在正在做一个元素。当您单击一个元素时,会出现以下信息,我想知道如何在您单击下一个元素而不重新单击同一元素时使其消失....例如,我的元素中有披萨,我想单击肉披萨看到浇头然后点击奶酪披萨看到浇头和肉
我有一个路由器模块,它将主题与正则表达式进行比较,并将出现的事件与一致的键掩码链接起来。 (它是一个简单的 url 路由过滤,如 symfony http://symfony.com/doc/curr
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: mysql_fetch_array() expects parameter 1 to be resource, bo
我在底部有一个带有工具栏的 View ,我正在使用 NavigationLink 导航到该 View 。但是当 View 出现时,工具栏显示得有点太低了。大约半秒钟后,它突然跳到位。它只会在应用程序启
我试图在我的应用程序上为背景音乐添加一个 AVAudioPlayer,我正在主屏幕上启动播放器,尝试在应用程序打开时开始播放但出现意外行为... 它播放并立即不断创建新玩家并播放这些玩家,因此同时播放
这是获取一个数字,获取其阶乘并将其加倍,但是由于基本情况,如果您输入 0,它会给出 2 作为答案,因此为了绕过它,我使用了 if 语句,但收到错误输入“if”时解析错误。如果你们能提供帮助,我真的很感
暂停期间抛出异常 android.os.DeadObjectException 在 android.os.BinderProxy.transactNative( native 方法) 在 androi
我已经为猜词游戏编写了一些代码。它从用户输入中读取字符并在单词中搜索该字符;根据字符是否在单词中,程序返回并控制一些变量。 代码如下: import java.util.Random; import
我是自动化领域的新手。这是我的简单 TestNG 登录代码,当我以 TestNG 身份运行该代码时,它会出现 java.lang.NullPointerException,双击它会突出显示我导航到 U
我是c#程序员,我习惯了c#的封装语法和其他东西。但是现在,由于某些原因,我应该用java写一些东西,我现在正在练习java一天!我要创建一个为我自己创建一个虚拟项目,以便让自己更熟悉 Java 的
我正在使用 Intellij,我的源类是 main.com.coding,我的资源文件是 main.com.testing。我将 spring.xml 文件放入资源文件中。 我的测试类位于 test.
我想要我的tests folder separate到我的应用程序代码。我的项目结构是这样的 myproject/ myproject/ myproject.py moduleon
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 6 年前。 因此,我尝试比较 2 个值,一个
我是一名优秀的程序员,十分优秀!