2014-12-20 5 views
-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(); 
} 
} 
+5

당신은'for' 루프의 끝에'return 0'을 넣습니다. 그래서 그 점에 도달하면'doInBackground' 함수에서 리턴합니다. 이것은 나머지 루프가 실행되지 않는다는 것을 의미합니다. – Doorknob

답변

2

return 0; 

항상 port에 대한 상관없이 실제 값, 루프를하는 방법에서 돌아 오지 때문에 종료됩니다 라인. 코드는 한 번만 실행됩니다.