我在Java上从事一个相当大的项目.我的问题是如何最好地为我的应用程序构建属性集.
方法1:拥有一些可供每个类访问的静态Properties对象.(缺点:那么,如果某些类被从应用程序的上下文中取出,它们将失去它们的一般性;它们还需要显式调用位于不同类中的某个静态对象,并且可能在将来消失;它只是不会感觉对,我错了?)
方法2:让属性由主类实例化并传递给其他应用程序类.(缺点:你最终将指向Properties对象的指针传递给几乎每个类,它似乎变得非常冗余和繁琐;我不喜欢它.)
有什么建议?
我的问题可以归结为:它是Swing编程中的标准结构,它允许侦听器控制新组件(例如新的JPanel)以进行显示和输入,并使新组件的侦听器控制新组件以进行显示和输入,等等到无穷大?或者Java是否需要恢复到某种统一类,它将所有Swing组件按程序顺序连接在一起?
目前,在我的应用程序中仅使用一个JFrame,在我的侦听器中,我的初始JFrame对象作为参数传递给我的所有JPanel,因此他们的侦听器可以调用removeall()来清除新JPanel的帧.例如,短代码如下
public class MainFrame {
JFrame jfrm;
public MainFrame() {
jfrm = new JFrame("Main Frame");
JPanel mainPanel = new MainPanel(jfrm);
}
}
public class MainPanel extends JPanel {
public MainPanel(final JFrame mainFrame) {
JButton example = new JButton("Example");
example.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent le) {
mainFrame.removeall();
JPanel 2ndPanel = new 2ndPanel(mainFrame);
mainFrame.add(2ndPanel);
mainFrame.validate();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的结构 - 在哪里产生新面板的听众而不是一些统一的类?但是,如果是这样的话,如果有一个级联无限的侦听器,Java的编译器如何获得mainFrame.validate()?我是一个老派程序程序员,试图用Java编写Swing应用程序,我想我可能没有掌握Swing编程的基本概念.期待任何有用的答案,并提前感谢!
我正在使用POCO开发原型EF应用程序.主要是作为框架的介绍我想知道在一个漂亮的结构中设置应用程序的好方法.后来我打算将WCF纳入其中.
我所做的是以下内容:
1)我创建了一个edmx文件,但是Code Generation Property设置为None并生成了我的数据库模式,
2)我创建的POCO看起来像:
public class Person
{
public Person()
{
}
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
3)我创建了一个Context
public class PocoContext : ObjectContext, IPocoContext
{
private IObjectSet<Person> persons;
public PocoContext() : base("name=PocoContainer", "PocoContainer")
{
ContextOptions.LazyLoadingEnabled = true;
persons= CreateObjectSet<Person>();
}
public IObjectSet<Person> Persons
{
get
{
return persons; …Run Code Online (Sandbox Code Playgroud) 今天我开始研究FUSE开源代码,在那里我找到了这样的几行:
struct fuse_session;
struct fuse_chan;
Run Code Online (Sandbox Code Playgroud)
我不知道如何解释它,据我所知' struct'后跟结构名称,然后是变量名称.在这种情况下,只有一个命名实体后跟struct,所以这个融合会话本身就是结构变量或结构名称.它可能是一些非常基本的东西,但我无法在任何地方找到它.
#define offsetof(type, member) ((size_t)(&((type *)0)->member))
Run Code Online (Sandbox Code Playgroud)
我不明白(&((type *)0)->member)这究竟是什么告诉我的.....
这里的类型可能是一个结构或其他东西?? ...
更具体地说,这是什么告诉我?
我这里有一个代码示例.
struct node {
int data;
struct node *link;
};
static struct node *first = NULL;
Run Code Online (Sandbox Code Playgroud)
如果有人能够对我在下面关于静态这个词的使用的问题提出一些看法,那就太棒了.
关键字static在上面的代码中做了什么?
普通结构和静态结构有什么区别?
在C:
我试图使用包含大数组的结构,并在声明它时发生堆栈溢出错误.我猜(正确吗?)我在堆栈中没有足够的内存,因此,我应该使用堆(我不想改变我的堆栈内存大小,因为代码将由其他人使用).有人能告诉我一个简单的方法吗?或者我应该使用除结构之外的其他东西?
我的代码 - definitions.h:
#define a_large_number 100000
struct std_calibrations{
double E[a_large_number];
};
Run Code Online (Sandbox Code Playgroud)
我的代码 - main.c:
int main(int argc, char *argv[])
{
/* ...
*/
// Stack overflows here:
struct std_calibrations calibration;
/* ...
*/
return (0);
}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
我有一个像下面这样的结构
[StructLayout(LayoutKind.Sequential)]
public struct MyStructType
{
[MarshalAs(UnmanagedType.U1)]
public byte stx;
public UInt16 cmdId;
public UInt16 status;
public UInt16 pktNo;
[MarshalAs(UnmanagedType.U1)]
public byte contPkt;
[MarshalAs(UnmanagedType.U1)]
public byte dataoffset;
public UInt16 dataLength;
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 6)]
public byte[] data;
public UInt16 checkSum;
[MarshalAs(UnmanagedType.U1)]
public byte cr;
}
Run Code Online (Sandbox Code Playgroud)
我试图通过使用下面的代码将此结构转换为字节数组.
byte[] ConvertStructureToByteArray(MyStructType str)
{
int size = Marshal.SizeOf(str);
byte[] arr = new byte[size];
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(str, ptr, true);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
return arr;
}
Run Code Online (Sandbox Code Playgroud)
但我得到了以下错误,因为他们不知道的大小
类型'MyStructType'不能作为非托管结构封送; 不能计算有意义的大小或偏移量.
因为这个问题
public UInt16 …Run Code Online (Sandbox Code Playgroud) 我的程序需要以下功能:
注意:我没有包含数字1,2和4的代码,因为我已经完成了它们.第三个是我的问题.
我的问题是如何将搜索输入与s_college中的用户输入进行比较以获得学生数量.我知道的唯一方法是使用strcmp(),但它给了我这个错误:从'char'到'const char*'的无效转换[-fpermissive]
那么如何比较这两者以获得每所大学的学生人数呢?
#include<stdio.h>
#include<string.h>
#include<conio.h>
int i,n,sum,search,num=0,ctr=0;
char answer,choice,choice2,search2;
struct record{
int s_id;
char s_name[100];
char s_course;
char s_college[5];
int s_scoress;
}id[100],name[100],course,college[100],scores;
struct s_scores{
int frst_grade;
int scnd_grade;
int fnl_grade;
}first,second,final;
void ADD();
void COLLEGE();
void ID();
void COLLEGE(){
printf("Enter college (abbreviation only)");
scanf("%s",&search2);
for(i=0;i<num;i++){
if(strcmp(college[i].s_college,search2)==0);
ctr++;
}
printf("The number of students in %s is %d",search2,ctr);
Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我,下面显示的结构的大小是24而不是20.
typedef struct
{
double d; // this would be 8 bytes
char c; // This should be 4 bytes considering 3 bytes padding
int a; // This would be 4 bytes
float b; // This would be 4 bytes
} abc_t;
main()
{
abc_t temp;
printf("The size of struct is %d\n",sizeof(temp));
}
Run Code Online (Sandbox Code Playgroud)
我的假设是当我们考虑填充时结构的大小将是20但是当我运行此代码时,大小打印为24.