小编aRe*_*ess的帖子

在运行时按路径加载共享库

我正在构建一个Java应用程序,它使用用C++编写的共享库,并为不同的操作系统编译.问题是,这个共享库本身依赖于它通常在适当的环境变量(PATH,LIBRARY_PATHLD_LIBRARY_PATH)下找到的附加库.

我可以 - 但不想 - 设置这些环境变量.我宁愿在运行时从给定路径加载所需的共享库 - 就像插件一样.不 - 我不希望任何启动应用程序在新环境中启动新进程.有谁知道如何实现这一目标?

我知道这一定是可能的,因为我使用的库之一能够从给定路径加载其插件.当然我更喜欢与平台无关的代码,但如果不可能,Windows,Linux和MacOS的单独解决方案也会这样做.

编辑 我应该提到我希望使用的共享库是面向对象的,这意味着单个函数的绑定不会这样做.

c++ plugins shared-libraries

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

javax.json:将新的JsonNumber添加到现有的JsonObject

我想将属性添加到现有的实例中JsonObject.如果是这个属性boolean,这很容易:

JsonObject jo = ....;
jo.put("booleanProperty", JsonValue.TRUE);
Run Code Online (Sandbox Code Playgroud)

但是,我也想添加一个,JsonNumber但我找不到创建实例的方法JsonNumber.这是我能做的:

JsonObjectBuilder job = Json.createObjectBuilder();
JsonNumber jn = job.add("number", 42).build().getJsonNumber("number");
jo.put("numberProperty", jn);
Run Code Online (Sandbox Code Playgroud)

但我想不出一个更脏的方式来完成我的任务.那么 - 是否有更直接,更清晰的方法来添加JsonNumber到现有的实例JsonObject

java json

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

Swing和Nimbus:替换JPopupMenu的背景(附加到JMenu)

Nimbus通常看起来很棒,但对于某些颜色组合,结果是非最佳的.在我的情况下,a的背景JPopupMenu不适合,这就是我想手动设置的原因.

我在Java 7上,有趣的是,Nimbus完全忽略了UIManager(像PopupMenu.background)中某些属性的设置.所以我唯一的选择是创建JPopupMenu该覆盖的子类paintComponent(...).我知道,那很讨厌,但至少它起作用了.

但是,如果你添加一个JMenu到另一个菜单,它嵌入它自己的实例,JPopupMenu我无法弄清楚如何用我自己的子类替换它.

即使PopupMenuUI为嵌入式实例分配自己也没有带来任何结果.如果直接从JPopupMenuoverriden paint(...)方法继承而被调用,但是,无论我做了什么,都没有绘制.如果继承的javax.swing.plaf.synth.SynthPopupMenuUI paint甚至没有被调用,结果就是我根本没有设置自己PopupMenuUI.

所以简单的问题是:如何JPopupMenu使用Nimbus作为L&F,在Java 7上调整一个或者(如果这更容易)的背景颜色?

编辑:代码示例

看一下下面的代码和结果:

public static void main(final String[] args) {
    try {
        UIManager.setLookAndFeel(NimbusLookAndFeel.class.getCanonicalName());
        UIManager.getLookAndFeelDefaults().put("PopupMenu.background", Color.GREEN);
        UIManager.getLookAndFeelDefaults().put("Panel.background", Color.RED);
        UIManager.getLookAndFeelDefaults().put("List.background", Color.BLUE);
    } catch (ClassNotFoundException | InstantiationException
            | IllegalAccessException | UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200,200);

    JPanel panel = new JPanel(new BorderLayout());
    panel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    JList …
Run Code Online (Sandbox Code Playgroud)

java swing nimbus jpopupmenu

15
推荐指数
3
解决办法
6815
查看次数

Eclipse Helios的自定义Java代码折叠

我花了很多时间用谷歌搜索,现在我会在这里试试.你们中的一些人可能知道Microsoft Visual Studio中可用的"区域",它们允许您将代码的任意部分折叠成一行,或多或少像

// [start] The text which will appear instead of the collapsed part
...
A bunch of lines of code
...
// [end]
Run Code Online (Sandbox Code Playgroud)

在我看来,这是一个非常好的评论代码的方法,但它似乎不适用于Java和Eclipse.但是,有对于一个插件(点击),但它不与Eclipse赫利俄斯工作.

所以这是我的问题:你知道在当前版本的eclipse中实现这种代码折叠的方法吗?

java eclipse eclipse-plugin folding

13
推荐指数
1
解决办法
4579
查看次数

Autoconf/Automake:如何避免将"check"选项传递给AC_CONFIG_SUBDIRS

我正在使用Autoconf来构建我的c ++项目.它使用第三方代码,也是在Autoconf/Automake的帮助下构建的.所以在我的configure.ac我有以下几行:

AC_CONFIG_SUBDIRS([subdirectoryname])
Run Code Online (Sandbox Code Playgroud)

一切正常,但我也使用该功能让测试自动make check执行 - 这也是由第三方代码完成的.因为这些测试需要一段时间,所以每次我想测试自己的代码时执行它们都很烦人.那么有什么方法可以避免将check选项传递给子目录Makefile

更新:覆盖check-recursive似乎不是一个选项,因为我的顶级Makefile.am看起来(或多或少)像这样:

SUBDIRS=library src
Run Code Online (Sandbox Code Playgroud)

因此禁用此级别的检查也会禁用我的src文件夹内的检查.这不是我想要实现的目标.我只是想禁用library目录中的检查.

c++ automake autoconf

8
推荐指数
1
解决办法
1436
查看次数

将原始类型与ClassLoader一起使用

我有一段代码用于将字符串表示Class.getCanonicalName()转换为相应的实例Class.这通常可以使用ClassLoader.loadClass("className").但是,它在原始类型上失败了ClassNotFoundException.我遇到的唯一解决方案是这样的:

private Class<?> stringToClass(String className) throws ClassNotFoundException {
    if("int".equals(className)) {
        return int.class;
    } else if("short".equals(className)) {
        return short.class;
    } else if("long".equals(className)) {
        return long.class;
    } else if("float".equals(className)) {
        return float.class;
    } else if("double".equals(className)) {
        return double.class;
    } else if("boolean".equals(className)) {
        return boolean.class;
    }
    return ClassLoader.getSystemClassLoader().loadClass(className);
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎讨厌,所以有什么干净的办法吗?

java classloader primitive-types

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

Postgresql:插入两组或更多组的笛卡尔积

作为定义:两组的笛卡尔乘积是这些集合的所有可能对的集合,因此{A,B} x {a,b} = {(A,a),(A,b),(B,a ),(b,b)}.

现在我想将这样的笛卡尔积插入数据库表(每对作为一行).它旨在用每个对的默认值填充表,因此此时数据(即两组)不存在于数据库中.

任何想法如何用postgresql实现这一点?

编辑:

在Grzegorz Szpetkowski的回答的帮助下,我能够生成一个能够实现我想要实现的目标的查询,但它确实不是最漂亮的查询.假设我要插入集合{1,2,3}和{'A','B','C'}的笛卡尔积.

INSERT INTO "Test"
SELECT * FROM
(SELECT 1 UNION SELECT 2 UNION SELECT 3) P
CROSS JOIN
(SELECT 'A' UNION SELECT 'B' UNION SELECT 'C') Q
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

编辑2: 接受的答案很好,但我发现另一个版本,如果它变得更复杂可能是适当的:

CREATE TEMP TABLE "Numbers" (ID integer) ON COMMIT DROP;
CREATE TEMP TABLE "Chars" (Char character varying) ON COMMIT DROP;
INSERT INTO "Numbers" (ID) VALUES (1),(2),(3);
INSERT INTO "Chars" (Char) VALUES ('A'),('B'),('C');
INSERT INTO "Test"
SELECT * FROM
"Numbers"
CROSS JOIN …
Run Code Online (Sandbox Code Playgroud)

sql postgresql cartesian-product

4
推荐指数
1
解决办法
6697
查看次数

对象声明:字符串作为键有所不同吗?

关于JSON是Object Literal Notation的子集,stackoverflow上有一些问题浮现在这里.但我找不到我的具体问题的答案.

两者之间有什么区别吗?

var obj = {keyName : "value"};
Run Code Online (Sandbox Code Playgroud)

var obj = {"keyName" : "value"};
Run Code Online (Sandbox Code Playgroud)

在JavaScript?

javascript object node.js

4
推荐指数
2
解决办法
103
查看次数

从 SharedWorker 向 SharedWorker 发送消息

有关 SharedWorkers 的 MDN 文档指出:

SharedWorker 接口代表一种特定类型的工作人员,可以从多个浏览上下文(例如多个窗口、iframe甚至工作人员)访问它。

对我来说,这听起来好像 SharedWorkers 应该能够直接交换消息。但是,如果我尝试从另一个 SharedWorker 中访问 SharedWorker,即使用

var worker = new SharedWorker("path/to/file.js");
Run Code Online (Sandbox Code Playgroud)

我明白了

ReferenceError:SharedWorker 未定义

我只是误读了文档,还是有其他方法可以做到这一点?

javascript web-worker

2
推荐指数
1
解决办法
2377
查看次数

C++:返回多个NEW数组

我认为这是一个简单的问题,但它让我发疯:我想从一个方法返回多个数组,调用方法事先并不知道它们的大小.所以我必须在方法中创建那些数组(与仅填充它们相反)并且我无法使用它们返回它们return.

所以我想要的是这样的方法签名:

void giveMeArray(int[] *anArray)
Run Code Online (Sandbox Code Playgroud)

方法签名只有一个参数来简化示例,请假设我也可以有一个签名

void giveMeArrays(int[] *anArray, float[] *anotherArray)
Run Code Online (Sandbox Code Playgroud)

在该方法内部,giveMeArray我将构造数组

*anArray = new int[5];
Run Code Online (Sandbox Code Playgroud)

我会用这个方法来调用

int[] result;
giveMeArray(&result);
Run Code Online (Sandbox Code Playgroud)

但是,所有这些(从方法签名开始)至少在语法上是错误的.请原谅我现在手头没有编译错误,我很确定你们中的一些人会知道什么是错的.

编辑知道 std :: vector将是最好的(意思是最干净的)方法.然而,伙计们,这不是问题.

c++ arrays

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