java在一个JFrame的构造函数里创建另一个JFrame,结果另一个JFrame的内容没显示,为什么?

java在一个JFrame的构造函数里创建另一个JFrame,结果另一个JFrame的内容没显示,为什么?,第1张

JFrame,JApplet,JDialog都是顶层容器即最大的容器,所以应该不能嵌套在JFrame容器中的,JFrame容器应该只能嵌套比它小的容器或组件,如普通容器JPanel,JScrollPane等容器才能嵌套在JFrame容器中。

package zhidao;

public abstract class Sensor extends Thread

{

public static void main ( String[] args )

{

Sensor sensor = new Sensor (""){};

DaySensor daySensor = sensornew DaySensor ("daySensor");

TemperatureSensor tSensor = sensornew TemperatureSensor ("tSensor");

LocationSensor locationSensor = sensornew LocationSensor ("locationSensor");

HRBPSensor hSensor = sensornew HRBPSensor ("hSensor");

WaterSensor waterSensor = sensornew WaterSensor ("waterSensor");

daySensorstart ();

tSensorstart ();

locationSensorstart ();

hSensorstart ();

waterSensorstart ();

}

// 构造函数

protected Sensor ( String dataSrc )

{

thissetName (dataSrc);

thissetPriority (ThreadMIN_PRIORITY);

}

public void run ()

{

Thread thread = null;

try

{

while (null != ( thread = ThreadcurrentThread () ))

{

String name = threadgetName ();

if ("daySensor"equals (name))

{

threadinterrupt ();

thread = null;

Systemoutprintln ("I am daySensor");

}

else if ("tSensor"equals (name))

{

threadinterrupt ();

thread = null;

Systemoutprintln ("I am tSensor");

}

else if ("locationSensor"equals (name))

{

threadinterrupt ();

thread = null;

Systemoutprintln ("I am locationSensor");

}

else if ("hSensor"equals (name))

{

threadinterrupt ();

thread = null;

Systemoutprintln ("I am hSensor");

}

else if ("waterSensor"equals (name))

{

threadinterrupt ();

thread = null;

Systemoutprintln ("I am waterSensor");

}

Threadsleep (2000);

}

}

catch (InterruptedException e)

{}

}

private void publishData ()

{}

// 下面是5个sensor

public class DaySensor extends Sensor

{

protected DaySensor ( String dataSrc )

{

super (dataSrc);

}

}

public class TemperatureSensor extends Sensor

{

// 重写 publishData()

private void publishData ()

{}

protected TemperatureSensor ( String dataSrc )

{

super (dataSrc);

}

}

public class LocationSensor extends Sensor

{

protected LocationSensor ( String dataSrc )

{

super (dataSrc);

}

}

public class HRBPSensor extends Sensor

{

protected HRBPSensor ( String dataSrc )

{

super (dataSrc);

}

}

public class WaterSensor extends Sensor

{

protected WaterSensor ( String dataSrc )

{

super (dataSrc);

}

}

}

学生类(BKstu)的两个构造函数的函数名错了,应该将“stu”改为“BKstu”。

无参构造函数没有定义体,可以将

stu();

改为

      stu(){ };

3如果使用标准名字空间,重载<<和>>运算符的函数,好像还要提前声明。

这个是比较考验C#技术的问题,我写了一个非常简单的实现示例,但BsonDocument的实现明显复杂很多,由于是闭源的,也许可以从反编译看到其具体实现:

    class Program

    {

        static void Main(string[] args)

        {

            MyClass myClass = new MyClass

            {

                { "a","11" },

                { "b","22" }

            };

            foreach (var kv in myClass)

            {

                ConsoleWriteLine("{0}={1}\n", kvKey, kvValue);

            }

            ConsoleReadKey();

        }

    }

    public class MyClass : IEnumerable<KeyValuePair<string, string>>

    {

        public Dictionary<string, string> mydata;

        public MyClass()

        {

            thismydata = new Dictionary<string, string>();

        }

        public string this[string k]

        {

            get { return mydata[k]; }

            set { mydata[k] = value; }

        }

        public IEnumerator<KeyValuePair<string, string>> GetEnumerator()

        {

            return thismydataGetEnumerator();

        }

        IEnumerator IEnumerableGetEnumerator()

        {

            return thismydataGetEnumerator();

        }

        public void Add(string k, string v)

        {

            thismydataAdd(k, v);

        }

    }

上图中 outer 是在变量环境里面的,为了方便看

全局执行上下文中的 this:

函数中的this:

那能不能设置执行上下文中的 this 来指向其他对象呢? 肯定是可以的

1、通过函数的 call 方法设置:

2、通过对象调用方法设置:

3 通过构造函数中设置:

嵌套函数中的 this 不会从外层函数中继承

那怎么实现 bar 的this指向外层 myObj 呢?

本质是把 this 体系转换为了作用域的体系 。也可以使用 ES6 中的箭头函数来解决这个问题

因为 ES6 中的箭头函数并不会创建其自身的执行上下文,所以箭头函数中的 this 取决于它的外部函数

1、this 指向不同:

①:函数call(对象,arg1,arg2)

②:函数apply(对象,[arg1,arg2,])

③:var ss=函数bind(对象,arg1,arg2,)

2、箭头函数没有原型,

3、箭头函数不能绑定arguments,取而代之用rest参数解决

4、箭头函数是匿名函数,不能作为构造函数,不能使用new

5、箭头函数不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。

6、 函数体内的this对象(继承的),就是定义时所在的对象,而不是使用时所在的对象。

如何实现 call 和apply?

bind的实现原理比call和apply要复杂一些,bind中需要考虑一些复杂的边界条件。bind后的函数会返回一个函数,而这个函数也可能被用来实例化:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12180990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存