小编Stu*_*ook的帖子

为什么GCC的__attribute __((...))语法使用双括号?

GCC __attribute__((...))语法文档表明属性必须用双括号包围,但不能给出这个设计决策的基本原理.

什么实际原因会导致GCC的设计师要求这样做?它与预处理器处理双括号有什么关系吗?

c gcc

39
推荐指数
2
解决办法
2218
查看次数

为什么在使用反射调用方法时,"对象不是声明类的实例"?

public class Shared {

    public static void main(String arg[]) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        Shared s1 = new Shared();

        Object obj[] = new Object[2];
        obj[0] = "object1";
        obj[1] = "object2";
        s1.testParam(null, obj);

        Class param[] = new Class[2];
        param[0] = String.class;
        param[1] = Object[].class; //// how to define the second parameter as array
        Method testParamMethod = s1.getClass().getDeclaredMethod("testParam", param);
        testParamMethod.invoke("", obj); ///// here getting error
    }

    public void testParam(String query,Object ... params){
        System.out.println("in the testparam method");
    }

}
Run Code Online (Sandbox Code Playgroud)

这是输出:

in …
Run Code Online (Sandbox Code Playgroud)

java reflection illegalargumentexception

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

什么是超长表格/编码?

阅读关于UTF-8维基百科文章,我一直想知道这个术语是否过长.该术语使用了不同的时间,但该文章没有提供其含义的定义或参考.

我想知道是否有人可以解释这个术语及其目的.

unicode sequences utf-8 codepoint character-encoding

17
推荐指数
2
解决办法
4104
查看次数

BigInteger到byte []

我需要将Java BigInteger实例转换为以字节为单位的值.从API中,我得到了这个方法toByteArray(),它返回一个包含这个BigInteger的二进制补码表示的byte [].

因为我的所有数字都是正128位(16字节)整数,所以我不需要2位补码形式给我128位+符号位(129位)......

有没有办法直接从BigInteger获得标准(没有2的补码形式)表示?

如果没有,我怎么能正确移位整个byte [17]数组以丢失符号位以获得一个byte [16]数组?

java byte biginteger

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

Linux上的JNI问题:无法打开共享对象文件

我已经在这里看到了这个问题,尝试了提议的修复,但到目前为止我没有成功.我有相当多的Java经验,但JNI很久以前,从来没有在Linux上做过...

我正在尝试在Linux上运行一个简单的HelloWorld JNI应用程序.

小java文件:

class HelloWorld {

    private native void print();

    public static void main(String[] args){
        new HelloWorld().print();
    }

    static {
        System.out.println(System.getProperty("java.library.path"));
        System.loadLibrary("HelloWorld");
    }

}
Run Code Online (Sandbox Code Playgroud)

小C文件:

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
    printf("Hello World!\n");
    return;
}
Run Code Online (Sandbox Code Playgroud)

通过以下方式编译C文件:

gcc -shared -Wall -fPIC HelloWorld.c -I/usr/lib/gcc/x86_64-redhat-linux/3.4.3/include/ -o libHelloWorld.so
Run Code Online (Sandbox Code Playgroud)

运行应用程序:

java HelloWorld
Run Code Online (Sandbox Code Playgroud)

要么

java -Djava.library.path=/home/nxp40954/jnitesting/. HelloWorld
Run Code Online (Sandbox Code Playgroud)

但没有好处,得到一个:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/nxp40954/jnitesting/libHelloWorld.so: /home/nxp40954/jnitesting/libHelloWorld.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

奇怪,因为实际上有一个/home/nxp40954/jnitesting/libHelloWorld.so …

linux java-native-interface

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

CDI - 观察容器事件

我正在尝试观察CDI Web应用程序的启动和关闭事件.我有一个ApplicationScoped bean来侦听这些事件:

@ApplicationScoped
public class PrettyfacesStartupObserver
{
    private static final Log LOGGER = LogFactory.getLog(PrettyfacesStartupObserver.class);

    public PrettyfacesStartupObserver()
    {
        LOGGER.debug("\n\n\n\n\n\n\n\n\n\nconstructor");
    }

    public void onStartup(@Observes
    AfterBeanDiscovery afterBeanDiscovery
                                             )
    {
        LOGGER.debug("\n\n\n\n\n\n\n\n\n\nafter bean discover");
    }

    public void onStartup(@Observes
    AfterDeploymentValidation afterDeploymentValidation
                                             )
    {
        LOGGER.debug("\n\n\n\n\n\n\n\n\n\n\nafter deployment validation");
    }

    public void onShutdown(@Observes
    BeforeShutdown beforeShutdown
                                                )
    {
        LOGGER.debug("\n\n\n\n\n\n\n\n\n\n\nbefore shutdown:" + beforeShutdown);
    }
Run Code Online (Sandbox Code Playgroud)

我在日志中看不到任何内容.

我错过了什么?

cdi java-ee-6 jboss-weld

6
推荐指数
2
解决办法
4830
查看次数

如何从C++调用Java方法(java返回String [])?

据我所知,我不能从C++中调用将从Java字符串数组返回的方法,所以只有这个解决方案是循环调用方法,它将返回数组元素,但是如何将它们存储在C++数组中呢?

在Java中我有方法:

public static String getData(int index){ return arry[index]; }
Run Code Online (Sandbox Code Playgroud)

在C++中:

char * args[10];
for (int i = 0; i < arrayLength; i ++) {
    jmethodID mid = env->GetStaticMethodID(INF.cls_JSox, "getData",(I)Ljava/lang/String;");
    jobject result = env->CallStaticObjectMethod(cls, mid, num, i);
    const char *nativeString = env->GetStringUTFChars( (jstring) result, 0);
    const size_t len = strlen(nativeString);
    cout << "copying... \n";
    strncpy(args[i], nativeString, len);
    env->ReleaseStringUTFChars( (jstring)result, nativeString);
}
Run Code Online (Sandbox Code Playgroud)

但是当i= 1时,我在Java中遇到内存冲突错误.如何正确地将接收到的字符串中的数据复制到char * args[10]?从Java传递的每个字符串的长度大约是3-5个字符.

arrays string java-native-interface

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

Java int返回字符串

我有一个int变量,我想创建一个String返回该int变量的方法,我该怎么做呢?以下示例...并设置getAge()方法在年龄为18时返回"年轻",在年龄为30时返回"年龄".

private int age;

public String getAge() {

}
Run Code Online (Sandbox Code Playgroud)

java string int

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

无法在C中声明大小为400000的数组

我想做以下事情:

#include <windows.h>
#include <stdio.h>
#define N 400000

void main() {
    int a[N];
}
Run Code Online (Sandbox Code Playgroud)

我得到一个stackoverflow异常.我的电脑有6GB的主内存,所以我无法全部使用它.我该如何解决这个问题?我在Windows 7上使用VS 2008并在C中编码.

c stack-overflow visual-studio-2008

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

两倍,C++的新功能?

我发现这在Microsoft Visual C++ 2010中编译.

void main()
{
    int i=9;
    while (i>4)
    {
        i--; 
    }
    while (i>6);
}
Run Code Online (Sandbox Code Playgroud)

可能不会......第二次似乎没有效果

c++ visual-studio-2010

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