[Java] 2 Threads laufen lassen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von unix, 6. Oktober 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 6. Oktober 2009
    2 Threads laufen lassen

    Hey, ich hab mir ein kleines tool programmiert, welcheseinfach ne IP Range anpingt.

    Man gibt ne IP ein bsp:
    192.168.178.25

    Und der pingt dann von 192.168.178.1 bis 192.168.178.254 alles durch und listet IPs die geantwortet haben in nem Textfeld auf.
    In späteren versionen mach ichs dann besser das es nich nur im Class C Netzwerk funzt!

    Nun zu meinem Problem.

    Hier mal kurz 2 Methoden:

    Code:
     public void circle() {
     String SIPa = IPTexta.getText();//
     String SIPb = IPTextb.getText();//* IP= SIPa.SIPb.SIPc.scanblock
     String SIPc = IPTextc.getText();//
     while (scanblock <= 254) {
     // scanblock = IPc 4. IP Block
    
     String SIPd = scanblock.toString();
     String IP = SIPa + "." + SIPb + "." + SIPc + "." + SIPd;
     ping(IP);// Die Methode die die IP anpingt mit ner einstellbaren Timeout Zeit
     scanblock++;}
     finish();
     }
    Code:
     public void ping(String IP) {
     try {
     System.out.println("Ping going on: " + IP);
     if ((InetAddress.getByName(IP).isReachable(timeout)) == true) {// PING
     System.out.println("Ping successful on: " + IP);
     results.append(IP + newline); //Textfeld wird beschrieben und ein Absatz gemacht
     }
     } catch (UnknownHostException e) {
     System.out.println("UnknownHostException");
     e.printStackTrace();
     } catch (IOException e) {
     System.out.println("IOException");
     e.printStackTrace();
     }
    
     }

    Das alles läuft ziemlich langsam ab, da er zuerst die IP anpingt und dann noch dem Timeout berücksichtig bevor er zur nächsten geht!
    Im Schlimmsten Fall braucht er dann für jede IP die ganze Timeout Zeit xD

    Nun will ich dass der mehrere IPs pro Sekunde halt pingt, damits schneller läuft.
    Dachte ich mach des mit 2 threats, einen für des rotieren damit die nächste IP ausgewählt wird und einer für des anpingen selbst.
    Aber iwie bringt der mir Fehlermeldungen wenn ichs so aufbaue:


    Code:
     Thread t1 = new Thread(circle());
     Thread t2 = new Thread(ping(String IP));
    
    
    Methoden hab ich Runnable gemacht und die Runnable implementiert.
    Die Methoden will ich dann mit t1.start(); starten aber der bringt mir Fehlermeldungen hin das des mit dem Runnable nich hinhaut.

    Hat vllt. einer ne Idee wie man des richtig macht, oder wie man des noch realisieren könnte?
    Hab nämlich vor noch nen Portscanner drauß zu basteln ^^

    THX Bewertung ist ehrensache
    mfg
     
  2. 6. Oktober 2009
    AW: 2 Threats laufen lassen

    hi,

    das wird leider nicht so ganz klappen.

    die methode circle würde ich nicht per thread starten, da es unabhängig von der range ist.
    deshalb mein vorschlag:
    - lese dir die ips in einem vector (oder array) ein
    - dann gehst du dieses einzeln durch haust die dann in die methode ping (ping muss dann per thread gestartet werden)

    dennoch würde ich dir empfehlen, bevor du die sache antriggerst, dass du ein sleep mit einbaust. sprich wenn du die einzelnen ips durchgehst.


    hoffe du verstehst was ich meine.

    nice day,
    harry
     
  3. 7. Oktober 2009
    AW: 2 Threats laufen lassen

    kk hab jetzt ne methode vorher drinn, die alle IPs in einen String Array einliest.!

    OK habs kapiert das ich dann ping(IP) per threat starten muss, damit das restliche programm weiterläuft und zum nächsten pingen übergeht, während die gestartete ping(IP)noch aktiv ist!!

    Aber ich krieg es iwie nich hin die Methode ping(String IP) per Threat zu starten der stresst schon bei der initialisierung rum!!

    ping(String IP) hat ja nen String zu übernehmen und ich denk deswegen stresst der so rum!:

    Code:
     Thread t2 = new Thread(ping(String IP));
    Code:
     public void ping(String IP) {
     try {
     System.out.println("Ping going on: " + IP);
     if ((InetAddress.getByName(IP).isReachable(timeout)) == true) {// PING
     System.out.println("Ping successful on: " + IP);
     results.append(IP + newline); //Textfeld wird beschrieben und ein Absatz gemacht
     }
     } catch (UnknownHostException e) {
     System.out.println("UnknownHostException");
     e.printStackTrace();
     } catch (IOException e) {
     System.out.println("IOException");
     e.printStackTrace();
     }
     //hier kommt der sleep hin
     }
    
    den threat müsste ich ja dann per th2.start(); anstatt ping(IP); starten.
     
  4. 7. Oktober 2009
    AW: 2 Threats laufen lassen

    hab mir jetzt nicht alles durch gelesen aber du scheinst ja eine methode mit variablen in einem thread starten zu wollen. also einen parameterized thread. funzt in c# folgendender maßen:


    Code:
    List<string> myList = new List<string>();
     myList.Add(variable1);
     myList.Add(variable2);
    ...
    
    Thread thread1 = new Thread(new ParameterizedThreadStart(Methode1));
     thread1.Start(myList);
    
    
    die methode musst du dann mit einem objekt aufrufen

    zb. so:
    Code:
    public void Methode1(object Objekt1)
    
    danach musst du einfach die list wieder auflösen und in variablen schreiben. fertisch
    hoffe das hilft dir.....
    off-topic: ist das wirklich java? sieht so extrem nach c# aus

    und änder mal den topicnamen von "2 Threats laufen lassen" mal bitte in "2 ThreaDs laufen lassen", weil wenn jemand mal das gleiche sucht wirds einfacher zu finden
     
  5. 7. Oktober 2009
    AW: 2 Threats laufen lassen

    sieht mir auch sehr nach C# aus.

    aber jetzt erstmal zurück zu deinem problem

    Threads kannst du auf 2 wege starten. am einfachsten ist es wenn die klasse die die methode beinhaltet von thread erbt. so musst du nur den code der parallel ausgeführt werden soll in die run()-Methode packen und this.start() aufrufen.

    erbt deine klasse schon von einer anderen musst du das interface Runnable implementieren. das spiel mit der run()-methode ist dann das gleiche. lediglich der aufruf ist anders.

    new Thread(objektWelchesRunnableImplementiert).start();

    das wars im großen und ganzen.... für weitere infos gibts noch immer die java api bzw. die documentation von sun



    und komm blos nicht auf die idee run() manuell aufzurufen xD
     
  6. 8. Oktober 2009
    AW: 2 Threats laufen lassen

    harry1526 hat mir per PN mitgeteil, dass er es auch versucht hat, die per Thread schneller laufen zu lassen und das es net geht wegen der isReachable();

    Ich habs jetzt mal so hingecodet:

    Die Klasse Pinger erbt über extends Thread von Thread und dann pack ich in die run Methode:

    Code:
     public void run(){
     this.start();
     results.setText("");
     abc = 1;
     cancel.setVisible(true);
     while (abc <= 255){
     String IP = hosts[abc];
     pinging(IP);
     try {
     Thread.sleep(1000);
     } catch (InterruptedException e){
     // the VM doesn't want us to sleep anymore,
     // so get back to work
     }
     abc++;
     }
    
    }
    
    dann müsste er ja theoretisch, den Ping für eine IP ausführen dann weiter hochzählen und gleich den nächsten Ping setzen?

    Oder sollte man die pinging(IP) auch noch als Thread starten?
    Das wars ja was ich nich hinkriegen konnte weil da noch ein Parameter übergeben wird.

    Naja ich schau mir jetzt erstmal auf Empfehlen von Harry1526 Sockets an, vllt. kriegt man des auch mit denen realisiert!
     
  7. 8. Oktober 2009
    AW: 2 Threats laufen lassen

    da steht doch alles

    Thread (Java Platform SE 6)


    dort steht z.b. auch dass die JVM beim aufruf der methode start() die run()-Methode automatisch aufruft! deshalb is es schwachsinnig IN der run() den thread zu starten. btw würde der obige code nicht irgendwann so viele threads erzeugen dass der rechner in die knie geht?!

    naja... mein ansatz wäre:
    erstelle eine klasse die lediglich den ping ausführt. die klasse erbt von thread und die einzigste methode die du dort hast heißt run() !!! per konstruktor gibst du die entsprechende IP an.

    in einer zweiten klasse erzeugst du objekte der klasse (nennen wir sie pinger). am besten in ner collection speichern. wenn das getan ist kannst du über die collection iterieren und bei jedem objekt die start()-methode aufrufen.

    das wäre der einfachste weg. bei nem class c netzwerk is das kein problem. aber bei class a kannste das so nicht machen sonst hättest du 16.777.216 + 1 thread am laufen und das is nicht wirklcih performant.....

    übrigens brauchst du auch threads wenn du es über sockets realisieren willst ;D
    außer du setzt ein timeout



    [edit]: sollte es bis heute abend immer noch nicht gehen bastel ich mal shcnell was zusammen ^^
     
  8. 8. Oktober 2009
    AW: 2 Threats laufen lassen

    youngBug hat recht, dass wird nichts, wenn du den thread so startest.

    habe mich noch mal daran gesetzt, aber habe es an einem real ip nicht getestet.

    MainClass:
    Code:
    
    
    public class MainThread {
     
     public static void main(String args[]) throws InterruptedException{
     int scanblock = 1;
     String SIPa = "192";
     String SIPb = "168";
     String SIPc = "0";
    
     // String SIPa = IPTexta.getText();//
     // String SIPb = IPTextb.getText();//* IP= SIPa.SIPb.SIPc.scanblock
     // String SIPc = IPTextc.getText();//
     while (scanblock <= 10) {
     // scanblock = IPc 4. IP Block
     
     String SIPd = scanblock+"";
     String IP = SIPa + "." + SIPb + "." + SIPc + "." + SIPd;
     //ping(IP);// Die Methode die die IP anpingt mit ner einstellbaren Timeout Zeit
    
     MyThread myThread = new MyThread(IP);
     Thread th = new Thread(myThread);
     th.start();
     try {
     Thread.sleep(1);
     }
     catch (InterruptedException ex) {
     }
     scanblock++;
     }
     
     System.exit(0);
     }
    }
    
    
    und das hier ist die thread klasse
    Code:
    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    
    public class MyThread implements Runnable{
     
     String IP;
    
     public MyThread(String IP){
     this.IP = IP; 
     }
    
    
     @Override
     public void run() {
     try {
    // System.out.println("Ping going on: " + IP);
     Socket aSocket = new Socket(IP,80);
     aSocket.close();
    
     } catch (UnknownHostException e) {
     System.out.println("UnknownHostException");
    // e.printStackTrace();
     } catch (IOException e) {
     }
     }
    }
    
    
    so long,
    harry
     
  9. 8. Oktober 2009
    AW: 2 Threats laufen lassen

    das obige beispiel wird nicht funktionieren außer der rechner mit der IP hat einen dienst laufen der auf port 80 hört. sprich nen apache!

    ping arbeitet mit dem ICMP protokoll und nicht mit http ^^
     
  10. 8. Oktober 2009
    AW: 2 Threats laufen lassen

    das stimmt!

    es soll hier nur gezeigt werden, wie es funktionieren kann.

    man könnte in die while schleife auch eine for schleife einbauen, die dann auf die einzelnen ports eingeht und dann eine connection macht, falls der ping port deaktiviert bzw. gesperrt ist.
     
  11. 8. Oktober 2009
    AW: 2 Threats laufen lassen

    hab hier mal was kurz zamgebastelt. nur gibts da ein problem.
    wenn ich das so ausführe wie es ist sagt er jedesmal false.

    wenn ich aber ein einzelnes objekt erzeuge und dessen thread starte sagt er true (falls der host wirklich existiert)

    warum kann ich leider auch nicht sagen. wer was weiss bzw. ne ahnung hat warum es sich so verhält nur raus damit ^^


    hier der code

    Code:
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    public class Main extends Thread {
     
     /**
     * @param args
     * @throws Exception 
     */
     public static void main(String[] args) throws Exception {
     new Main();
     }
     
     public Main() throws Exception {
     // we are assuming third byte is 2
     String classC = "192.168.2.";
     Pinger[] arrPing = new Pinger[254];
     
     // first create the objects ...
     for(int i=1; i <= 254; i++) {
     arrPing[i-1] = new Pinger(classC + i);
     }
     
     System.out.println("starting threads . . .");
     // ... now start all threads at once
     for(Pinger p : arrPing) {
     p.start();
     }
     } 
     
     
     // This class will ping the specified IP address
     public class Pinger extends Thread {
     
     private InetAddress ipaddress = null;
     
     public Pinger(String ipaddress) {
     try {
     this.ipaddress = InetAddress.getByName(ipaddress);
     } catch(UnknownHostException e) {
     System.err.println("unknown host");
     this.ipaddress = null;
     }
     }
    
     public void run() {
     if(ipaddress!=null) {
     try {
     System.out.println("host " + ipaddress.getHostAddress() + " alive? " + ipaddress.isReachable(1000) );
     } catch (IOException e) {
     }
     }
     }
     }
    }
    
    
     
  12. 9. Oktober 2009
    AW: 2 Threats laufen lassen

    hmm also ich hab auf den Pinger geschissen und gleich den PortChecker gemacht

    Der Funzt auch mit Harrys Code schneller dank dem Threat.
    *leider noch nicht schnell genug *

    Hier mal der komplette Code:

    Spoiler
    Code:
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;
    import java.awt.TextArea;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import java.util.*;
    
    public class PortCheck extends Thread implements ActionListener {
     /**
     * 
     */
     private static final long serialVersionUID = 1L;
    
     public static void main(String[] args) {
     new PortCheck().OpenFrame();
     }
    
     String IPs[];
     Integer[] porti = new Integer[65535];
     String hosts[] = new String[255];
     String SIPa, IP;
     String SIPb, SIPc, SIPd, SIPe;
     Integer block1, block2, block3, block4, th, th2, timeout, index1, index2,
     index3;
     Integer abc;
     Integer scanblock = new Integer(1);
     JTextField IPTexta = new JTextField("129", 3);
     JTextField IPTextb = new JTextField("206", 3);
     JTextField IPTextc = new JTextField("100", 3);
     JTextField IPTextd = new JTextField("134", 3);
     JTextField timeoutt = new JTextField("20", 4);
     JTextField portt = new JTextField("", 5);
     JTextField portt2 = new JTextField("", 5);
     Integer port = new Integer(0);
     JLabel labelport = new JLabel("von Port: ");
     JLabel labelport2 = new JLabel("bis Port:");
     JButton start = new JButton("start");
     JButton cancel = new JButton("cancel");
     JFrame mFrame, sFrame;
     JLabel IPLabel = new JLabel("IP:");
     JPanel pNorth = new JPanel();
     JPanel pCenter = new JPanel();
     JPanel pSouth = new JPanel();
     JPanel pNorth2 = new JPanel();
     JPanel pCenter2 = new JPanel();
     JPanel pCenter3 = new JPanel();
     JPanel pCenter4 = new JPanel();
     JPanel pSouth2 = new JPanel();
     JLabel punkt1 = new JLabel(".");
     JLabel punkt2 = new JLabel(".");
     JLabel punkt3 = new JLabel(".");
     javax.swing.Timer time;
     JLabel resultsl = new JLabel("Results::");
     JLabel Timeout = new JLabel("Timeout=");
     TextArea results = new TextArea("");
    
     private final static String newline = "\n";
    
     void portcheck(Integer port) {
     String SIPa = IPTexta.getText();// 192
     String SIPb = IPTextb.getText();// * IP= SIPa.SIPb.SIPc.scanblock168
     String SIPc = IPTextc.getText();// 178
     String SIPd = IPTextd.getText();
     IP = (SIPa + "." + SIPb + "." + SIPc + "." + SIPd);
     System.out.println("Testing Port " + port + " on: " + IP);
     try {
     Socket socket = new Socket(IP, port);
     System.out.println(socket);
     System.out.println("Yes hat geklappt an port:" + port);
     results.append(IP + ":" + port + newline);
     } catch (UnknownHostException e) {
     System.out.println("UNknown Host");
     e.printStackTrace();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     System.out.println("IOException");
     }
     }
    
     public void OpenFrame() {
     sFrame = new JFrame("Pinger 0.1 Class C Host Scanner");
     sFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     sFrame.add(BorderLayout.NORTH, pNorth2);
     sFrame.add(BorderLayout.CENTER, pCenter2);
     sFrame.add(BorderLayout.SOUTH, pSouth2);
     pNorth2.setLayout(new FlowLayout());
     pNorth2.add(IPLabel);
     pNorth2.add(IPTexta);
     pNorth2.add(punkt1);
     pNorth2.add(IPTextb);
     pNorth2.add(punkt2);
     pNorth2.add(IPTextc);
     pNorth2.add(punkt3);
     pNorth2.add(IPTextd);
     pCenter2.setLayout(new GridLayout(2, 1));
     pCenter2.add(pCenter3);
     pCenter2.add(pCenter4);
     pCenter3.add(Timeout);
     pCenter3.add(timeoutt);
     pCenter4.add(labelport);
     pCenter4.add(portt);
     pCenter4.add(labelport2);
     pCenter4.add(portt2);
     pSouth2.setLayout(new FlowLayout());
     pSouth2.add(start);
     start.addActionListener(this);
     sFrame.setVisible(true);
     sFrame.setSize(300, 200);
     }
    
     public void actionPerformed(ActionEvent b) {
     final String s = b.getActionCommand();
     if (s.equals("start")) {
     timeout = (Integer.parseInt(timeoutt.getText())) * 60;
     port = (Integer.parseInt(portt.getText()));
     sFrame.dispose();
     // portcheck(port);
     start2();
     }
     if (s.equals("cancel")) {
     System.out.println("Shut Down Programm");
     System.exit(0);
     }
    
     }
    
     public void start2() {
     mFrame = new JFrame("Results in Pinging Class C Network: ");
     mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     mFrame.add(BorderLayout.NORTH, pNorth);
     mFrame.add(BorderLayout.CENTER, pCenter);
     mFrame.add(BorderLayout.SOUTH, pSouth);
     pSouth.setLayout(new FlowLayout());
     pNorth.add(resultsl);
     pCenter.setLayout(new GridLayout(1, 1));
     pCenter.add(results);
     results.setSize(80, 350);
     results.setVisible(true);
     pNorth.setVisible(true);
     pSouth.add(cancel);
     cancel.addActionListener(this);
     mFrame.setSize(200, 400);
     mFrame.setVisible(true);
     System.out.println("Following are the good ports");
     fillArrayport();
     results.append("succesfull Ports:" + newline + "//////" + newline);
     mFrame.setVisible(false);
     mFrame.setVisible(true);
     abc = 1;
     cancel.setVisible(true);
     circle()();
    
     }
    
     void fillArrayport() {
     Integer port1 = Integer.valueOf(portt.getText()).intValue(); // von Port
     Integer port2 = Integer.valueOf(portt2.getText()).intValue();// bis Port
    
     abc = port2 - port1;
     scanblock = 0;
     while (scanblock <= abc) {
     porti[port1] = port1;
     results.append("" + porti[port1] + newline);
     scanblock++;
     port1++;
     }
    
     }
    
     public void finish() {
     System.out.println("checking done");
    
     results.append(newline + "END");
    
     }
    
     public void circle() {
    
     System.out.println("Hoi");
    
     Integer port1 = Integer.valueOf(portt.getText()).intValue(); // von Port
     Integer port2 = Integer.valueOf(portt2.getText()).intValue();// bis Port
     abc = port2 - port1;
     scanblock = 0;
     while (scanblock <= abc) {
     Integer port = new Integer(porti[port1]);
     System.out.println("jetzt kommt der portcheck");
     portcheck(port);
     MyThread myThread = new MyThread(port);
     Thread th = new Thread(myThread);
     th.start();
    
     try {
     Thread.sleep(10);
     } catch (InterruptedException e) {
     // the VM doesn't want us to sleep anymore,
     // so get back to work
     }
     scanblock++;
     port1++;
    
     }
     extracted();
     finish();
     }
    
     private void extracted() {
     this.stop();
     }
    
     public void ipsearch(String IP) {
     // String = 192.168.178.25
     // Positionen 01234567890123 Punkte bei 3,7,11
     int index1 = IP.indexOf(".", 0); // Erste Position des Punktes
     int index2 = IP.indexOf(".", index1 + 1);// Zweite Postition des Punktes
     int index3 = IP.indexOf(".", index2 + 1); // Dritte Postition des
     // Punktes
     // String = 192.168.178.25
     block1 = Integer.parseInt(IP.substring(0, index1));
     block2 = Integer.parseInt(IP.substring(index1 + 1, index2));
     block3 = Integer.parseInt(IP.substring(index2 + 1, index3));
     block4 = Integer.parseInt(IP.substring(index3 + 1));
     System.out.println("calculated IP=" + block1 + "." + block2 + "."
     + block3 + "." + block4);
     }
    
     public class MyThread implements Runnable {
    
     Integer port;
    
     public MyThread(Integer port) {
     this.port = port;
     }
    
     @Override
     public void run() {
     String SIPa = IPTexta.getText();// 192
     String SIPb = IPTextb.getText();// * IP= SIPa.SIPb.SIPc.scanblock168
     String SIPc = IPTextc.getText();// 178
     String SIPd = IPTextd.getText();
    
     IP = (SIPa + "." + SIPb + "." + SIPc + "." + SIPd);
     System.out.println("Testing Port " + port + " on: " + IP);
    
     try {
     Socket socket = new Socket(IP, port);
     System.out.println(socket);
     System.out.println("Yes hat geklappt an port:" + port);
     results.append(IP + ":" + port + newline);
     } catch (UnknownHostException e) {
     System.out.println("UNknown Host");
     e.printStackTrace();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     System.out.println("IOException");
     }
     }
     }
    
    }
    

    Also Stress hab ich noch mit:

    • ErledigtGeschwindigkeit (2 Minuten für 100 Ports) * habs gemessen (ich brauch über 21 Stunden für alle Ports
    • ErledigtGibt der mir die IP+port in die TextArea gleich 2 mal aus, weils anscheinend so schnell geht ^^
    • Das Frame ist überlastet während der die ports checkt. obwohl eig. nur die TextArea mit append frisch befüllt wird und ein sleep mit drinn ist. des sollte auch abzubrechen sein. xD

    Naja das ist meine heutige Tagesplanung den Scheiß hinzukriegen ^^.
    Wenn net mach ich Montag weiter, hab heut nur bis um 1 Zeit

    THX an euch beiden ihr habt mir sehr geholfen.
    Thread bleibt offen falls ihr weiter helfen wollt

    //Edit das Problem, dass die IP + port 2 mal in der TextArea auftauchen ist schonmal gelöst ^^ *ging schnell*
    der Thread darf net innerhalb der Schleife gestartet werden sondern vor der Schleife dann passts.

    //EDIT2::

    ICH BIN SO BLÖD
    nur weils geklappt hat dachte ich der Thread funzt, aber ich ruf ja nur die normale methode auf und scheiß auf den thread xD

    Jetzt hab ichs hingekriegt und der macht mir die 100 ports innerhalb von ca. 2 Sekunden ^^

    Jetzt läuft das Teil so schnell das der in der TextArea müll ausgibt ^^ voll in der falschen Reihenfolge etc. Jetzt musst ich noch ne 2 sleep methode einbauen damits richtig hinhaut ^^

    Und ich hab noch Stress mit nem JScrollPane:xD
    Spoiler
    Code:
     JTextArea results = new JTextArea("");
     JScrollPane scrollPane = new JScrollPane(results);
    
     public void start2() {
     mFrame = new JFrame("Port Checker 0.1 by Artur Dick");
     mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     mFrame.add(BorderLayout.NORTH, pNorth);
     mFrame.add(BorderLayout.CENTER, pCenter);
     mFrame.add(BorderLayout.SOUTH, pSouth);
     pSouth.setLayout(new FlowLayout());
     pSouth.add(cancel);
     pNorth.add(resultsl);
     pCenter.add(scroll);
     scroll.setLayout(new GridLayout(1, 1));
     // scroll.add(results);
     scrollPane.add(results);
     scroll.add(scrollPane);
     // results.add(scrollPane);
     // pCenter.add(scrollPane);
     // this.getContentPane().add(scroll);
     results.setLineWrap(true);
     results.setWrapStyleWord(true);
     results.setSize(80, 350);
     scroll.setVisible(true);
     scrollPane.setVisible(true);
     // scrollPane
     // .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
     results.setText("");
     results.setVisible(true);
     cancel.addActionListener(this);
     mFrame.setSize(200, 400);
     fillArrayport();// Array mit den möglichen Ports füllen!!!
     mFrame.setVisible(true);
     abc = 1;
     Integer port1 = Integer.valueOf(portt.getText()).intValue(); // von Port
     Integer port2 = Integer.valueOf(portt2.getText()).intValue();// bis Port
     circle(port1, port2);
     }
    
     
  13. 9. Oktober 2009
    AW: 2 Threats laufen lassen

    genau das war mein problem mit dem isReachable. vermutlich kann das java nicht als thread laufen lassen.

    versuche mal einen sleep mit einzubauen, von einer sekunde.













    das passt aber irgendwie einiges nicht.
    wo kommt den scroll her???

    und was ist eigentlich deine fehlermeldung?
     
  14. 9. Oktober 2009
    AW: 2 Threats laufen lassen

    das mit sleep hab ich auch schon versucht. hat aber nicht den gewünschten effekt gehabt. und java KANN es als thread laufen lassen. wenn ich z.b.

    arrPing[0] = new Pinger("192.168.2.22")

    mache sagt er true. wenn er aber dann bei arrPing[21] den thread startet sagt dieser false. ziemlich strange
     
  15. 12. Oktober 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: 2 Threats laufen lassen

    Die Scheiß Scrollbars hab ich jetzt mit der TextArea gemacht da gehen die schneller ^^
    einfach
    TextArea results = new TextArea("", 1, 1, TextArea.SCROLLBARS_VERTICAL_ONLY);

    Jetzt hab ich nur noch Stress mit dem JFrame.
    des wird nicht richtig angezeigt während der Thread läuft.
    Und deswegen kann man auch nicht den Abbruch Button nicht benutzen!

    so sollte es aussehen

    Bild


    und so siehts aus:

    Bild


    Hab es schon mit sleep() probiert, aber des bewirkt nur das entweder des scannen langsamer wird oder die einzelnen Ports länger brauchen bis sie durch die Methode sind.
    Aber des Frame bleibt so.

    Code:
     public void start2() {
     mFrame = new JFrame("Port Checker 0.1 by Artur Dick");
     mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     mFrame.add(BorderLayout.NORTH, pNorth);
     mFrame.add(BorderLayout.CENTER, pCenter);
     mFrame.add(BorderLayout.SOUTH, pSouth);
     pSouth.setLayout(new FlowLayout());
     pSouth.add(cancel);
     pNorth.add(resultsl);
     pCenter.setLayout(new GridLayout(1, 1));
     pCenter.add(results);
     // results.setLineWrap(true);
     // results.setWrapStyleWord(true);
     results.setSize(80, 350);
     pCenter.setVisible(true);
     results.setText("");
     results.setVisible(true);
     cancel.addActionListener(this);
     mFrame.setSize(200, 400);
     fillArrayport();// Array mit den möglichen Ports füllen!!!
     mFrame.setVisible(true);}
    Das ist der Frame und da wird halt nur die results mit append befüllt.

    Ach und die Ping methode funzt bei mir jetzt auch mit Threads. Nach dem *fast* dem gleichen Code wie beim PortChecker!
     
  16. 12. Oktober 2009
    AW: 2 Threads laufen lassen

    dann solltest du mal versuchen, dass fenster im eigenen thread laufen zu lassen.

    sowas in der art
    Code:
     Thread frameThread = new Thread(new Runnable() {
     public void run() {
     new PortCheck().OpenFrame();
     }
     });
     frameThread.start();
    
    vielleicht funktioniert das.


    nice day
    harry
     
  17. 13. Oktober 2009
    AW: 2 Threads laufen lassen

    Jop mit nem 2. Thread klappts.
    Hab zwar den Frame in der Methode immer wieder neu zeichnen lassen, aber das hat anscheinend nicht gereicht ^^

    Und mit dem Pinger hab ich die gleichen Probleme wie YoungBug.

    Wenn ich ne IP direkt anpinge dann liefert er true.
    Aber wenn ers in der Methode macht von dem Array aus, liefert der alle false...

    xD

    naja meine probs. sind ja erledigt, ich close mal.
    Vielen Dank euch beiden

    mfg
     
  18. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.