-2
길게 부족합니다. 아주 간단한 GUI로 포트 스니퍼를 만들려고합니다. 작업자가 없으면 포트 스니퍼가 정상적으로 작동하지만 열려있는 포트를 찾을 때마다 area1을 업데이트하려고합니다. 작업자를 추가 한 후 "for"루프가 반복되지 않습니다. 누군가 문제가있는 곳을 알려 주면 좋을 것입니다.for 루프 문 항상 true
import java.net.*;
import java.awt.*;
import java.awt.event.*;
// definējam galveno klasi
public class PortScanner extends JFrame implements ActionListener {
JButton poga1 = new JButton("palaist skaneri");
JTextField jt = new JTextField ("ievadam adresi",30);
SwingWorker worker;
JTextArea area1 = new JTextArea(5, 40);
//taisam konsturkoturu
public PortScanner(){
//virsraksts
super("Portu skaneris007");
//definejam konteineru
Container content = getContentPane();
content.setBackground(Color.BLUE);
//liekam konteineri izkartojumu
content.setLayout(new FlowLayout());
//ieliekam logā pogu
content.add(poga1);
content.add(jt);
content.add(area1);
//ramim izmeri
setSize(600,500);
//pieliekam klausitaju
poga1.addActionListener(this);
jt.addActionListener(this);
//aiversanas operacija
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent a){
if(a.getSource()== poga1){
//seit bus darbiba ko veiks poga
this.metode1();
}
}
public void metode1() {
area1.setText("");
if (worker != null) {
worker.cancel(false);
}
worker = new SwingWorker() {
@Override
protected Integer doInBackground() {
for (int port = 1; port <= 65535; port++) { //65535
try {
String input = jt.getText();
Socket socket = new Socket();
socket.connect(new InetSocketAddress(input, port), 1000);
socket.close();
area1.append("ports " + port + "atvērts \n");
System.out.println("Port " + port + " is open");
} catch (Exception ex) {}
return 0;
}
worker.execute();
return null;
}
};
}
public static void main(String []args) {
new PortScanner();
}
}
당신은'for' 루프의 끝에'return 0'을 넣습니다. 그래서 그 점에 도달하면'doInBackground' 함수에서 리턴합니다. 이것은 나머지 루프가 실행되지 않는다는 것을 의미합니다. – Doorknob