小编Tim*_*mos的帖子

如何在Netbeans中关闭一个奇怪的"盒子"光标和选择行为?

我在Netbeans中有一些奇怪的行为.我想我不小心输入了一些搞砸了光标和选择行为的组合键.在图像中,您将看到我的意思:通常,如果您选择跨多行的文本,您将在右侧屏幕截图中看到该行为.

但我有左侧截图的行为.此外,尝试使用Shift在某个位置插入文本,将其插入到右侧的某些位置(=不是光标所在的位置).此外,当光标闪烁时,它显示为虚线.

Netbeans比较

左侧屏幕截图中的选择很好地绘制的事实并没有让我想到一个错误,而是一个功能.我似乎无法找到关键组合再次关闭它.

所以我的问题是,这个功能是什么?为什么它存在并且我用什么组合键打开它?

netbeans

77
推荐指数
2
解决办法
2万
查看次数

迭代WeakHashMap

我正在同时使用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)

java multithreading weak-references

10
推荐指数
1
解决办法
752
查看次数

带有 LayoutManager 的 JLayeredPane

情况:抽一堆扑克牌,就像纸牌游戏一样。堆放得很好。

为了实现这一点,我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 之外的任何其他约束对象。IntegerLayoutManager接口要求您实现以下方法:

addLayoutComponent(Component comp, Object constraints);
Run Code Online (Sandbox Code Playgroud)

并且过去Object的将永远是一个Integer

在我的特殊情况下,我很幸运,因为我的 XY 坐标可以根据 Z 坐标计算出来。例如,图层中的卡片k必须位于 Y 坐标k * offset。所以在我的情况下,约束对象是一个Integer不是问题。 …

java swing constraints layout-manager jlayeredpane

7
推荐指数
1
解决办法
4765
查看次数

Android - 在暂停活动后 onResume() 之前调用 onConfigurationChanged()

在我的活动中,我在播放视频时覆盖了 onConfigurationChanged() 方法,并且我不想等待一秒钟,直到系统再次准备好在我更改设备方向后继续播放视频。这工作得很好 - 我的视频一直在流畅播放,方向也发生了变化,而视频会重新缩放以适应屏幕尺寸。

然而,当采取这些步骤时,我发现了一个错误:

  1. 我在视频播放期间暂停了我的应用
  2. 我改变方向
  3. 我“恢复”我的应用

发生的第一件事是: onConfigurationChanged() 被调用,而不是 onResume() 之后我的所有字段都应该被恢复!这会导致一个异常,其原因是除以零 - 某些字段等于 0,因为它尚未恢复。当然,这不是我们想要的行为。我的应用程序在以暂停的相同方向恢复时确实有效。

不过,我可以通过使用指示我的 Activity 是否已“完全加载”的布尔值来规避这一点——也就是说,已经调用了 onResume() 方法。但我认为这不是一个非常干净的解决方案。

我的问题是:

  1. 这是预期的行为吗?我认为 onConfigurationChanged() 在 onResume() 之前被调用很奇怪。这是一个错误吗?
  2. 我能否以编程方式“取消注册”我的应用程序,使其暂时不监听 onConfigurationChanged()(例如,在 onPause() 方法中取消注册)?由于此方法不会被调用,因为您必须为其注册一些侦听器,但会因为您在 AndroidManifest.xml 文件中放入以下行而被调用:

    android:configChanges="方向"

android

5
推荐指数
1
解决办法
4718
查看次数

JFrame使用Windows边框进行装饰,否则即使设置了外观也感觉不到

今天是个好日子.

首先:检查此图像.

请注意,在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)

java swing jframe look-and-feel

3
推荐指数
1
解决办法
1万
查看次数

getenv() 如何是线程安全的?

我想使用getenv()函数。

现在我从某人那里得到了一个评论,如果多个线程正在调用这个函数,这将不是线程安全的。但是,如果我查看此功能的信息页面,它会指出:

如果环境保持不变,同时调用此函数是安全的。

我理解静态数据块的概念,该函数返回一个指向它的指针。我知道块的内容可以随着时间的推移而改变,通过多次调用函数,作为参考页面状态。

如果一个线程正在调用

getenv("myEnvVar1")
Run Code Online (Sandbox Code Playgroud)

另一个正在打电话

getenv("myEnvVar2")
Run Code Online (Sandbox Code Playgroud)

是否会在返回的指针指向的地方使用相同的内存块?我应该如何解释“同时调用此函数是安全的”这一事实?

c++

3
推荐指数
1
解决办法
4734
查看次数