通过非静态方法使用 java 的执行程序服务
using java's executor service with a non-static method
我一直在写一个程序,它会打开一个 window,如果你关闭它,它会打开两个新的。它工作正常,但我试图通过使用调用我的函数 ColorChanger 的执行程序服务来更改所有 windows 的颜色。
问题是:如果我想使用executor服务,我需要一个静态方法,但是如果我想使用this.getContentPane().setBackground(Color.blue);
命令,我有使用非静态函数。
如果您需要更多信息,请查看我的代码,一切都应该自行解释:
public class SplittingWindow extends JFrame implements WindowListener,KeyListener {
int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight ();
Random rand = new Random();
String Input = new String();
static ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
public static void main(String[] args) {
executorService.scheduleAtFixedRate(() -> ColorChanger(), 0, 1, TimeUnit.SECONDS);
new SplittingWindow();
}
SplittingWindow(){
addWindowListener(this);
addKeyListener(this);
setResizable(false);
setSize(100,100);
setVisible(true);
setLocation(rand.nextInt(width-150),rand.nextInt(height-200)+50);
}
public void ColorChanger(){
getContentPane().setBackground(Color.blue);
}
public void windowClosing(WindowEvent arg0) {
System.out.println("closing");
new SplittingWindow();
new SplittingWindow();
dispose();
}
public void keyTyped(KeyEvent e) {
Input = Input + e.getKeyChar();
if(Input.contains("JayJay")==true){
System.exit(0);
}
}
// Removed various interface methods
}
事实是,如果您想使用 hs class 的方法而不将其设为静态,则需要实例化该对象:)
public static void main(String[] args) {
SplittingWindow sp = new SplittingWindow();
executorService.scheduleAtFixedRate(() -> sp.ColorChanger(), 0, 1, TimeUnit.SECONDS);
}
试试这个,它应该有效
我一直在写一个程序,它会打开一个 window,如果你关闭它,它会打开两个新的。它工作正常,但我试图通过使用调用我的函数 ColorChanger 的执行程序服务来更改所有 windows 的颜色。
问题是:如果我想使用executor服务,我需要一个静态方法,但是如果我想使用this.getContentPane().setBackground(Color.blue);
命令,我有使用非静态函数。
如果您需要更多信息,请查看我的代码,一切都应该自行解释:
public class SplittingWindow extends JFrame implements WindowListener,KeyListener {
int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight ();
Random rand = new Random();
String Input = new String();
static ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
public static void main(String[] args) {
executorService.scheduleAtFixedRate(() -> ColorChanger(), 0, 1, TimeUnit.SECONDS);
new SplittingWindow();
}
SplittingWindow(){
addWindowListener(this);
addKeyListener(this);
setResizable(false);
setSize(100,100);
setVisible(true);
setLocation(rand.nextInt(width-150),rand.nextInt(height-200)+50);
}
public void ColorChanger(){
getContentPane().setBackground(Color.blue);
}
public void windowClosing(WindowEvent arg0) {
System.out.println("closing");
new SplittingWindow();
new SplittingWindow();
dispose();
}
public void keyTyped(KeyEvent e) {
Input = Input + e.getKeyChar();
if(Input.contains("JayJay")==true){
System.exit(0);
}
}
// Removed various interface methods
}
事实是,如果您想使用 hs class 的方法而不将其设为静态,则需要实例化该对象:)
public static void main(String[] args) {
SplittingWindow sp = new SplittingWindow();
executorService.scheduleAtFixedRate(() -> sp.ColorChanger(), 0, 1, TimeUnit.SECONDS);
}
试试这个,它应该有效