- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java 的新手,目前正在尝试为我的大学类(class)构建一个端口扫描器。尽管我的用户界面有问题,但我已经完成了大部分工作。我已将按钮文本设置为根据一组变量从“开始扫描”更改为“停止扫描”。当按下“开始扫描”按钮时,它会启动托管扫描仪的线程,但是,按钮文本不会更改为“停止扫描”,直到线程完成为止。我不知道如何解决这个问题。任何帮助将不胜感激。
这是我的Swing类
package com.ui;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.NumberFormat;
import javax.annotation.PostConstruct;
import javax.swing.*;
import javax.xml.bind.ParseConversionEvent;
import com.scanner.PortScanner;
/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class MainApp extends javax.swing.JFrame {
private JTextField txtTargetIP;
private JLabel lblEndPort;
private JLabel lblScanning;
private JList lstMessages;
private JButton btnScan;
private JLabel lblPortNumber;
private JList listListening;
private JCheckBox chkFullRange;
private JTextField txtFinalPort;
private JTextField txtStartPort;
private JLabel lblStartPort;
private JLabel lblTarget;
private DefaultListModel lstMessagesModel;
private DefaultListModel listListeningModel;
private PortScanner ps;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MainApp inst = new MainApp();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public MainApp() {
super();
initGUI();
}
private void initGUI() {
try {
{
getContentPane().setLayout(null);
this.setTitle("Port Scanner");
{
txtTargetIP = new JTextField();
getContentPane().add(txtTargetIP);
txtTargetIP.setText("Enter Target IP Here");
txtTargetIP.setBounds(167, 39, 234, 22);
//txtTargetIP.setToolTipText("Enter the ip address or Domain name of the target Computer");
txtTargetIP.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
txtTargetIPMousePressed(evt);
}
});
}
{
lblTarget = new JLabel();
getContentPane().add(lblTarget);
lblTarget.setText("Target Domain");
lblTarget.setBounds(50, 42, 111, 15);
}
{
lblStartPort = new JLabel();
getContentPane().add(lblStartPort);
lblStartPort.setText("Start Port");
lblStartPort.setBounds(50, 87, 71, 22);
}
{
txtStartPort = new JTextField();
getContentPane().add(txtStartPort);
txtStartPort.setText("Start Port");
txtStartPort.setBounds(121, 87, 82, 22);
txtStartPort.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
txtStartPortMousePressed(evt);
}
});
}
{
lblEndPort = new JLabel();
getContentPane().add(lblEndPort);
lblEndPort.setText("Final Port");
lblEndPort.setBounds(246, 87, 73, 22);
}
{
txtFinalPort = new JFormattedTextField(NumberFormat.INTEGER_FIELD);
getContentPane().add(txtFinalPort);
txtFinalPort.setText("Final Port");
txtFinalPort.setBounds(319, 87, 82, 22);
txtFinalPort.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
txtFinalPortMousePressed(evt);
}
});
}
{
chkFullRange = new JCheckBox();
getContentPane().add(chkFullRange);
chkFullRange.setText("Check All Ports");
chkFullRange.setBounds(50, 119, 133, 19);
chkFullRange.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
chkFullRangeItemStateChanged(evt);
}
});
}
{
listListeningModel = new DefaultListModel();
listListening = new JList();
getContentPane().add(listListening);
listListening.setModel(listListeningModel);
listListening.setBounds(248, 204, 153, 133);
listListening.setBorder(BorderFactory.createTitledBorder("Listening Ports"));
listListening.setEnabled(false);
}
{
lblScanning = new JLabel();
getContentPane().add(lblScanning);
lblScanning.setText("Currently Scanning Port: ");
lblScanning.setBounds(50, 349, 171, 16);
}
{
lblPortNumber = new JLabel();
getContentPane().add(lblPortNumber);
lblPortNumber.setText("Port Number");
Font f1 = new Font("italic", Font.ITALIC, 12);
lblPortNumber.setFont(f1);
lblPortNumber.setBounds(234, 349, 94, 16);
}
{
btnScan = new JButton();
getContentPane().add(btnScan);
btnScan.setText("Start Scan");
btnScan.setBounds(50, 150, 351, 42);
btnScan.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
btnScanMousePressed(evt);
}
});
}
{
lstMessagesModel = new DefaultListModel();
lstMessages = new JList();
getContentPane().add(lstMessages);
lstMessages.setModel(lstMessagesModel);
lstMessages.setBounds(50, 204, 153, 133);
lstMessages.setBorder(BorderFactory.createTitledBorder("Messages"));
lstMessages.setEnabled(false);
}
}
this.setSize(448, 411);
} catch (Exception e) {
e.printStackTrace();
}
}
private void txtTargetIPMousePressed(MouseEvent evt) {
if (txtTargetIP.getText().equals("Enter Target IP Here") || txtTargetIP.getText().equals("------")){
txtTargetIP.setText("");
}
if (txtStartPort.getText().equals("")){
txtStartPort.setText("Start Port");
}
if(txtFinalPort.getText().equals("")){
txtFinalPort.setText("Final Port");
}
}
private void txtStartPortMousePressed(MouseEvent evt) {
if((txtStartPort.getText().equals("Start Port") || txtStartPort.getText().equals("------")) && chkFullRange.isSelected()==false){
txtStartPort.setText("");
}
if(txtTargetIP.getText().equals("")){
txtTargetIP.setText("Enter Target IP Here");
}
if(txtFinalPort.getText().equals("") && chkFullRange.isSelected()==false){
txtFinalPort.setText("Final Port");
}
}
private void txtFinalPortMousePressed(MouseEvent evt) {
if((txtFinalPort.getText().equals("Final Port") || txtFinalPort.getText().equals("------")) && chkFullRange.isSelected()==false){
txtFinalPort.setText("");
}
if(txtTargetIP.getText().equals("")){
txtTargetIP.setText("Enter Target IP Here");
}
if(txtStartPort.getText().equals("") && chkFullRange.isSelected()==false){
txtStartPort.setText("Start Port");
}
}
//Check All Ports
private void chkFullRangeItemStateChanged(ItemEvent evt) {
if(chkFullRange.isSelected()==true){
txtStartPort.setEnabled(false);
txtStartPort.setText("0");
lblStartPort.setForeground(Color.GRAY);
txtFinalPort.setEnabled(false);
txtFinalPort.setText("65535");
lblEndPort.setForeground(Color.GRAY);
;
}
if (chkFullRange.isSelected()==false){
txtStartPort.setEnabled(true);
txtStartPort.setText("Start Port");
lblStartPort.setForeground(Color.BLACK);
txtFinalPort.setEnabled(true);
txtFinalPort.setText("Final Port");
lblEndPort.setForeground(Color.BLACK);
}
if(txtTargetIP.getText().equals("")){
txtTargetIP.setText("Enter Target IP Here");
}
}
//Start Scan
private void btnScanMousePressed(MouseEvent evt) {
lstMessagesModel.clear();
refresh();
if (btnScan.getText().equals("Start Scan") && errorCheck()==0){
listListeningModel.clear();
btnScan.setText("Stop Scan");
lstMessagesModel.addElement("Scan Started...");
int p1 = Integer.parseInt(txtStartPort.getText());
int p2 = Integer.parseInt(txtFinalPort.getText());
String target = txtTargetIP.getText();
ps = new PortScanner(p1, p2, target);
ps.run();
listListeningModel.addElement(ps.getListening());
}
else if (btnScan.getText().equals("Stop Scan") || ps.isAlive()==false){
ps.stopScan();
btnScan.setText("Start Scan");
lstMessagesModel.addElement("Scan Stopped");
}
}
//Check input for errors
public int errorCheck(){
System.out.println("Running errorCheck");
int errors=0;
if (txtTargetIP.getText().equals(null) || txtTargetIP.getText().equals("Enter Target IP Here") || txtTargetIP.getText().equals("------")){
txtTargetIP.setBackground(Color.RED);
txtTargetIP.setText("------");
lstMessagesModel.addElement("No target Specified");
errors++;
}else{
txtTargetIP.setBackground(Color.WHITE);
}
if(chkFullRange.isSelected()==false && (txtStartPort.getText().equals(null) || txtStartPort.getText().equals("Start Port") || txtStartPort.getText().equals("------"))){
txtStartPort.setBackground(Color.RED);
txtStartPort.setText("------");
lstMessagesModel.addElement("No Start Port Specified");
errors++;
}else{
txtStartPort.setBackground(Color.WHITE);
}
if(chkFullRange.isSelected()==false && (txtFinalPort.getText().equals(null) || txtFinalPort.getText().equals("Final Port") || txtFinalPort.getText().equals("------"))){
txtFinalPort.setBackground(Color.RED);
txtFinalPort.setText("------");
lstMessagesModel.addElement("No Final Port Specified");
errors++;
}else{
txtFinalPort.setBackground(Color.WHITE);
}
System.out.println(errors);
return errors;
}
//Refresh Input Areas
public void refresh(){
if (txtTargetIP.getText().equals("") || txtTargetIP.getText().equals("------")){
txtTargetIP.setText("Enter Target IP Here");
}
if (txtStartPort.getText().equals("") || txtStartPort.getText().equals("------")){
txtStartPort.setText("Start Port");
}
if (txtFinalPort.getText().equals("") || txtFinalPort.getText().equals("------")){
txtFinalPort.setText("Final Port");
}
}
}
这是我的扫描码。
package com.scanner;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadFactory;
public class PortScanner extends Thread implements Runnable{
private boolean running = true;
//private int currentPort;
private List<Integer> listening = new ArrayList<Integer>();
private int startPort;
private int finalPort;
private String targetDomain;
public PortScanner() {
// TODO Auto-generated constructor stub
}
public PortScanner(int startPort, int finalPort, String targetDomain) {
super();
this.startPort = startPort;
this.finalPort = finalPort;
this.targetDomain = targetDomain;
}
@Override
public void run() {
while(running==true){
for (int currentPort = startPort; currentPort <= finalPort; currentPort++) {
System.out.println(currentPort + ":" + finalPort);
try {
Socket socket = new Socket();
socket.connect(new InetSocketAddress(targetDomain, currentPort),200);
listening.add(currentPort);
System.out.println("listening: " + listening);
socket.close();
} catch (IOException e) {
System.out.println("scanning: " + currentPort);
}
if(currentPort!=finalPort+1){
running=false;
}
}
}
}
//stop Thread
public void stopScan(){
running=false;
}
/*public int getCurrentPort() {
return currentPort;
}
public void setCurrentPort(int currentPort) {
this.currentPort = currentPort;
}*/
public List<Integer> getListening() {
return listening;
}
public void setListening(List<Integer> listening) {
this.listening = listening;
}
public int getStartPort() {
return startPort;
}
public void setStartPort(int startPort) {
this.startPort = startPort;
}
public int getFinalPort() {
return finalPort;
}
public void setFinalPort(int finalPort) {
this.finalPort = finalPort;
}
public String getTargetDomain() {
return targetDomain;
}
public void setTargetDomain(String targetDomain) {
this.targetDomain = targetDomain;
}
}
很抱歉,如果要分享的代码过多,但我不确定哪些部分与您相关,所以我已经全部分享了。
您看到的任何其他改进也将不胜感激。预先感谢您的帮助。
致以诚挚的问候
詹姆斯
最佳答案
您应该调用ps.start()
使ps 作为一个单独的线程运行;
看起来你已经调用了ps.run()
,它没有启动一个单独的线程,而是以顺序的方式运行代码
关于java - 我所有的按钮点击方法在操作之前等待线程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702302/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!