我在Netbeans中有一些奇怪的行为.我想我不小心输入了一些搞砸了光标和选择行为的组合键.在图像中,您将看到我的意思:通常,如果您选择跨多行的文本,您将在右侧屏幕截图中看到该行为.
但我有左侧截图的行为.此外,尝试使用Shift在某个位置插入文本,将其插入到右侧的某些位置(=不是光标所在的位置).此外,当光标闪烁时,它显示为虚线.

左侧屏幕截图中的选择很好地绘制的事实并没有让我想到一个错误,而是一个功能.我似乎无法找到关键组合再次关闭它.
所以我的问题是,这个功能是什么?为什么它存在并且我用什么组合键打开它?
我正在同时使用WeakHashMap.我想基于Integer参数实现细粒度锁定; 如果线程A需要修改由Integer标识的资源,a并且线程B对由Integer标识的资源执行相同的操作b,则它们不需要同步.但是,如果有两个线程使用相同的资源,假设线程C也使用由Integer标识的资源a,那么线程A和C当然需要在同一个Lock上同步.
当没有更多线程需要具有ID X的资源时,可以删除Map中for Lock = X的锁定.但是,另一个线程可以在那一刻进入并尝试在Map中使用ID = X的锁,因此在添加/删除锁时我们需要全局同步.(这将是每个线程必须同步的唯一地方,无论Integer参数如何)但是,一个线程无法知道何时删除锁,因为它不知道它是使用锁的最后一个线程.
这就是我使用WeakHashMap的原因:当不再使用ID时,可以在GC需要时删除键值对.
为了确保我对已存在的条目的键具有强引用,并且确切地说是构成映射关键字的对象引用,我需要迭代映射的keySet:
synchronized (mrLocks){
// ... do other stuff
for (Integer entryKey : mrLocks.keySet()) {
if (entryKey.equals(id)) {
key = entryKey;
break;
}
}
// if key==null, no thread has a strong reference to the Integer
// key, so no thread is doing work on resource with id, so we can
// add a mapping (new Integer(id) => new ReentrantLock()) here as
// we are …Run Code Online (Sandbox Code Playgroud) 情况:抽一堆扑克牌,就像纸牌游戏一样。堆放得很好。
为了实现这一点,我JLayeredPane结合使用了接口的自定义实现LayoutManager。使用自定义 LayoutManager 的原因是堆栈方向各不相同,有时扑克牌完全相互覆盖,有时部分覆盖,这种逻辑对于 LayoutManager 来说似乎是一个很好的工作,因为这基本上可以归结为设置扑克牌的位置牌。
因此,它LayoutManager负责设置堆栈中所有组件的 X 和 Y 坐标。另一方面JLayeredPane负责它们的 Z 坐标(通过其层)。
将组件添加到 a 中的JLayeredPane过程如下:
JLayeredPane pane = new JLayeredPane();
pane.setLayout(new StackLayout(...));
pane.add(new CardView(...), new Integer(j));
Run Code Online (Sandbox Code Playgroud)
哪里new Integer(j)是卡片的层。这一定是Integer由于 的合同造成的JLayeredPane。
这里的问题是,由于上述原因, myStackLayout不能有除 an 之外的任何其他约束对象。Integer该LayoutManager接口要求您实现以下方法:
addLayoutComponent(Component comp, Object constraints);
Run Code Online (Sandbox Code Playgroud)
并且过去Object的将永远是一个Integer。
在我的特殊情况下,我很幸运,因为我的 XY 坐标可以根据 Z 坐标计算出来。例如,图层中的卡片k必须位于 Y 坐标k * offset。所以在我的情况下,约束对象是一个Integer不是问题。 …
在我的活动中,我在播放视频时覆盖了 onConfigurationChanged() 方法,并且我不想等待一秒钟,直到系统再次准备好在我更改设备方向后继续播放视频。这工作得很好 - 我的视频一直在流畅播放,方向也发生了变化,而视频会重新缩放以适应屏幕尺寸。
然而,当采取这些步骤时,我发现了一个错误:
发生的第一件事是: onConfigurationChanged() 被调用,而不是 onResume() 之后我的所有字段都应该被恢复!这会导致一个异常,其原因是除以零 - 某些字段等于 0,因为它尚未恢复。当然,这不是我们想要的行为。我的应用程序在以暂停的相同方向恢复时确实有效。
不过,我可以通过使用指示我的 Activity 是否已“完全加载”的布尔值来规避这一点——也就是说,已经调用了 onResume() 方法。但我认为这不是一个非常干净的解决方案。
我的问题是:
我能否以编程方式“取消注册”我的应用程序,使其暂时不监听 onConfigurationChanged()(例如,在 onPause() 方法中取消注册)?由于此方法不会被调用,因为您必须为其注册一些侦听器,但会因为您在 AndroidManifest.xml 文件中放入以下行而被调用:
android:configChanges="方向"
今天是个好日子.
首先:检查此图像.

请注意,在3个框架的第一个框架中,按钮采用金属外观设计,但框架采用Windows风格.在按钮LAF与帧LAF匹配的情况下,其他2帧是"OK".
所有这些的代码(与图像的顺序相同):
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.getContentPane().add(new JButton("button"));
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
frame.setSize(100, 100);
frame.getContentPane().add(new JButton("button"));
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
// 0 => "javax.swing.plaf.metal.MetalLookAndFeel" …Run Code Online (Sandbox Code Playgroud) 我想使用getenv()函数。
现在我从某人那里得到了一个评论,如果多个线程正在调用这个函数,这将不是线程安全的。但是,如果我查看此功能的信息页面,它会指出:
如果环境保持不变,同时调用此函数是安全的。
我理解静态数据块的概念,该函数返回一个指向它的指针。我知道块的内容可以随着时间的推移而改变,通过多次调用函数,作为参考页面状态。
如果一个线程正在调用
getenv("myEnvVar1")
Run Code Online (Sandbox Code Playgroud)
另一个正在打电话
getenv("myEnvVar2")
Run Code Online (Sandbox Code Playgroud)
是否会在返回的指针指向的地方使用相同的内存块?我应该如何解释“同时调用此函数是安全的”这一事实?