我最近开始学习和探索Java中GUI编程的基础知识.
经过一段时间的编程后,我只完成了后端工作或工作,因此最接近用户界面的是命令控制台(我知道这令人尴尬).
我正在使用Swing,据我所知,这意味着我也使用AWT.
我的问题是基于这段代码:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new frame.setVisible(true);
}
} );
Run Code Online (Sandbox Code Playgroud)
我一直在研究这一段时间,因为我想完全理解这种奇怪的代码和所遇到的术语"事件派发线程"多次.如果我错了,但正如我所理解的那样纠正我; 它与使用多个线程以及Java Swing如何解释这些线程有关.我也收集到上面的代码用于确保所有线程在创建窗口之前是"安全的",因此invokeLater?
我读过:
"你只能从Event-Dispatching Thread中调用对框架进行操作的方法"
并且只有在某些情况下才能调用main方法对框架进行操作的方法.
有人可以向我澄清一下Event-Dispatching Thread到底是什么吗?
它如何与多个执行线程相关,以及如何从main方法调用这些线程是不安全的?为什么我们需要这个invokeLater?
我们不能像其他任何对象一样创建窗口吗?
我在研究中遇到了一些障碍,因为我没有抓住这些关系和想法.
一个侧面说明,我喜欢将我的知识建立在深入理解的基础上,因为我相信这会带来最好的整体结果,并因此成为最好的计划.如果我深入了解某些东西是如何工作的,那么你可以有效地使用提示和调整,而不仅仅是将它们重新编入代码中,所以请不要害怕给我一些额外的深入解释并扩展我的知识.
谢谢.
我用 C 编写了一个简单的函数,它可以将给定的数字提高到给定的幂。当我在 C 中调用它时,该函数返回正确的值,但是当我在 Python 中调用它时,它返回一个不同的、不正确的值。
我使用以下命令创建了共享文件:
$ gcc -fPIC -shared -o test.so test.c
我尝试了 C 函数的不同配置,其中一些返回预期值,而另一些不返回。例如,当我的函数使用return x*x没有for循环的简单正方形时,它在 Python 中返回了正确的值。
我希望最终能够在 python 中调用一个 C 函数,该函数将返回一个二维 C 数组。
#include <stdio.h>
float power(float x, int exponent)
{
float val = x;
for(int i=1; i<exponent; i++){
val = val*x;
}
return val;
}
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
float power(float x, int exponent)
{
float val = x;
for(int i=1; i<exponent; i++){
val = val*x;
}
return val;
}
Run Code Online (Sandbox Code Playgroud)
我在 C …