我刚刚遇到了JavaFX和Swing的奇怪之处.
处理已添加到JFrame或JPanel的JavaFX Panel时,重新添加新的JFXPanel将抛出IllegalStateException:"已调用Platform.exit".
在我的情况下,这是在我用JFXPanels删除了一些JPanels然后尝试重新添加它们之后发生的.
将IDisposable作为参数传递给方法并将其置于该方法中是一种好习惯.当你必须使用多个线程时,这是不可避免的.好吧,最佳实践说主人(来电者)应该处理它.
例如
public void MyMethod(MyClass reader){
using(reader){
//some code
}
}
Run Code Online (Sandbox Code Playgroud)
如果所有者(创建线程)不再存在怎么办?例如
interface IReader : IDisposable {
string Read();
}
public class MyReader : IReader {
public string Read()
{
return "hellow world";
}
public void Dispose()
{
//dispose code
}
}
Run Code Online (Sandbox Code Playgroud)
在这里你会发现问题......
public void Start() {
MyReader[] readerSet = new MyReader[5];
for (int i = 0; i < readerSet.Length; i++) {
readerSet[i] = new MyReader();
}
foreach (IReader reader in readerSet) {
ThreadPool.QueueUserWorkItem(new WaitCallback(Run), reader);
}
//exit after creating …Run Code Online (Sandbox Code Playgroud) 我有一个关于匿名事件处理程序的相当简短的问题:
这是我的代码:
public void AddTestControl(Control ctrl)
{
ctrl.Disposed += (o, e) => { RemoveTestControl(ctrl); };
ctrl.SomeEvent += _Control_SomeEvent;
}
public void RemoveTestControl(Control ctrl)
{
ctrl.SomeEvent -= _Control_SomeEvent;
}
Run Code Online (Sandbox Code Playgroud)
此代码是否正常,或者是否应重写代码以删除Disposed Event Handler?像这样的东西:
public void AddTestControl(Control ctrl)
{
ctrl.Disposed += _Control_Disposed;
ctrl.SomeEvent += _Control_SomeEvent;
}
public void RemoveTestControl(Control ctrl)
{
ctrl.Disposed -= _Control_Disposed;
ctrl.SomeEvent -= _Control_SomeEvent;
}
Run Code Online (Sandbox Code Playgroud) 现在我试图理解java垃圾收集的基本概念.
我已经阅读了很多关于它的文章.
在某处我看到的old generation地方tenured generation.描述非常相似.
看起来其中一个是第二个进化.
您能否提供有关此topiс的更多信息?