好的,所以我基本上已经完成了我能想到的最困难的解决方法,我正在努力的程序,现在一切正常......除了程序本身。
所以,这是我正在使用的代码:
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
}
});
}
然后thread2 runnable就是这样的:
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[]){
//是方法的骨架,但是我不能把它放在运行区域,而且我似乎无法从运行它的外部访问其他线程。 UGH!
./沮丧
答案 0 :(得分:1)
从类中运行静态方法,即使是实现runnable的类,也不会在该线程上运行,它将从称为静态方法的任何线程运行。您希望在该线程中发生的任何事情都需要从run()
调用。
thread2 mythread = new thread2();
new Thread(mythread).start(); //Spawns new thread
thread2.bubbleSort(args); //Runs in this thread, not the spawned one
在回复评论时,我认为您遇到了问题,因为您无法将参数传递给run方法。您需要在线程开始之前或通过某种数据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();
}