我有一个包含多个子目录的大型项目.在父目录中,我有一个CMakeLists.txt文件,该文件调用同一父目录中其他cmake文件中定义的函数.我在其中一个包含一些目标"run"的子目录中有一个自定义Makefile.当我从父目录调用cmake时,我希望执行位于子目录makefile中的"run"目标.我该怎么做?我知道有些人建议使用add_custom_target和add_custom_command,但我仍然对如何应用这些命令来完成此任务感到困惑.
好吧,蝙蝠,我知道这个问题听起来像是常识,或者因为它的措辞而非常混乱.不幸的是,由于我经过大量研究后缺乏知识,我不确定如何表达它.据我所知,静态变量不是指类的实例,而是使用class.method调用来访问它们.声明为非静态的变量和public是类的实例,可以使用object.method调用来调用.但是,在最近的例子中,我看到过如下声明:
private static Rectangle rect;
Run Code Online (Sandbox Code Playgroud)
为什么不写
public Rectangle rect;
Run Code Online (Sandbox Code Playgroud)
这怎么可能?我认为静态变量与类的实例没有关联?关于静态与非静态的含义和限制/用法,我感到非常困惑.我为任何困惑道歉.如果这个问题无法回答,那么提供静态和公共使用之间简单区分的示例的链接将非常受欢迎.我是一个完整的初学者,所以请避免使用太多的技术术语.提前致谢.
好吧,所以程序的目的是绘制和椭圆形并在屏幕上移动它.代码在Eclipse上编译时没有错误,但是在运行时,不会在屏幕上绘制或移动椭圆.我一直在研究,似乎线程必须做很多事情,但是我需要一个这个简单的程序吗?我很明显是使用Swing进行GUI编程的新手,所以我很感激解释或链接到一个关于线程或相关概念的程序的任何添加.
public class Game extends JPanel
{
int x =0;
int y =0;
private void moveBall()
{
x+=1;
y+=1;
}
public void paint (Graphics g)
{
super.paint(g);
g.fillOval(x, y, 30, 30);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Animation");
Game game = new Game();
frame.add(game);
frame.setVisible(true);
frame.setSize(300,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
while (true)
{
game.moveBall();
game.repaint();
}
}
}
Run Code Online (Sandbox Code Playgroud) 问题:所以我试图了解线程如何处理图形,所以我创建了一个程序,应该使用用户线程将屏幕颜色设置为红色.但是,当我运行程序时,它会无限次地打开我的JFrame窗口,我必须退出程序才能停止它.我该如何防止这种情况发生?提前致谢.
更新:所以很多人向我解释了罪魁祸首(现在已经注释掉):frame.add(new MWT),它反复调用构造函数并创建一个新对象.但是,如何在没有任何静态实例的情况下将Canvas添加到JFrame?谢谢
班级代码
public class MWT extends Canvas implements Runnable
{
private Thread fast;
public static void main(String [] args){
MWT draw = new MWT();
}
public MWT(){
JFrame frame = new JFrame("Thread Drawings");
frame.setVisible(true);
frame.setFocusable(true);
frame.setSize(600,500);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
// CULPRIT
//frame.add(new MWT());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
start();
}
private void stop() {
if (fast== null){
return;
}
else{
System.exit(0);
}
}
private void start() {
if (fast != null){
return;
}
else{
fast = new Thread(this); …Run Code Online (Sandbox Code Playgroud)