Выполнение метода из потока в Java - PullRequest
0 голосов
/ 10 февраля 2012

Хорошо, поэтому я в основном сделал самый сложный обходной путь, который я мог придумать для программы, над которой я работаю, и теперь у меня все работает ... кроме самой программы.

Итак, воткод, с которым я работаю:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        Thread thread = new Thread(new thread2());
        public void run() {
            thread.start();
            double startTime = System.nanoTime();
            SortingStuff ss = new SortingStuff();
            ss.setVisible(true);
            double endTime = System.nanoTime();
            double elapsedTime = endTime - startTime;
            System.out.println("This operation took " + elapsedTime + " nanoseconds, which is :" + ((elapsedTime / 1000000) / 1000) + " seconds."); // This will be better later
        }
    });
}

А затем поток2 запускается примерно так:

public static class thread2 implements Runnable{
public void run() {
    System.out.println("thread " +Thread.currentThread().getName());
}

Теперь, если я хотел вызвать статический метод из созданного потокаКак я мог сделать это?У меня есть метод с именем «bubbleSort», который я просто не могу заставить работать в созданном потоке.Справка?

    public static void bubbleSort(final String numbers[], final JButton numButton[]){ 

// Скелет метода, однако я не могу поместить его в область выполнения и не могу получить доступ к другому потоку снаружи того места, где он выполняется.Тьфу!

. / Разочарованный

1 Ответ

1 голос
/ 10 февраля 2012

Запуск статического метода из класса, даже такого, который реализует runnable, не будет выполняться в этом потоке, он будет запускаться из любого потока, называемого статическим методом.Все, что вы хотите, чтобы происходило в этом потоке, должно вызываться с run().

thread2 mythread = new thread2();
new Thread(mythread).start(); //Spawns new thread
thread2.bubbleSort(args); //Runs in this thread, not the spawned one

. В ответ на комментарий, я предполагаю, что у вас возникли проблемы, потому что вы не могли передать свои аргументы на выполнениеметод.Вам нужно передать эти данные в поток либо до его запуска, либо через какие-то данные stream(file, socket, etc).Здесь я использую конструктор, но это также можно сделать с помощью функции setData(data here).

public class Example implements Runnable {
    private dataObject args;

    public Example(dataObject input) {
        args = input;
    }
    public void dosort(dataObject sortArg){contents}

    public void run() {
        dosort(args);
    }
}

public static void main(stuff) { 
    Example myExample = new Example(data);
    //alternate example
    //myExample.setData(data);
    new Thread(myExample).start();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...