小编Ach*_*oot的帖子

为什么在System.out.println之前打印System.err.println?

我是从wiki责任链文章中试用Logger的例子.在它打印的想法中运行示例:

Sending to stderr: An error has occurred.
Writing to stdout: Entering function y.
Writing to stdout: Step1 completed.
Sending via email: Step1 completed.
Writing to stdout: An error has occurred.
Sending via email: An error has occurred.
Run Code Online (Sandbox Code Playgroud)

但是当我在stderrs中写一个断点时写了一个

class StderrLogger extends Logger {
    public StderrLogger(int mask) {
        this.mask = mask;
    }

    protected void writeMessage(String msg) {
        System.err.println("Sending to stderr: " + msg);//break out here
    }
}
Run Code Online (Sandbox Code Playgroud)

它打印除了std err之外的所有messag,这里没有涉及的线程,那么为什么它在运行情况下的第一行打印stderr?

java

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

JNI找不到本机方法(test \ Test.java:11:找不到符号)

我正在关注jni上的本教程

1)步骤使用方法制作了一个test \ Test.java文件

public native static int getDouble(int n);
Run Code Online (Sandbox Code Playgroud)

2)编译并生成头文件。(javac,javah)

3)创建一个VC Win32项目(应用程序类型:DLL)

4)将项目属性更改为包括

%JAVA_HOME%\include;%JAVA_HOME\include\win32\
Run Code Online (Sandbox Code Playgroud)

5)复制粘贴到vc项目中的test_Test.h。

6)Build> Confugration Manager(将平台更改为x64)

7)构建解决方案+将生成的.dll文件复制到Test.java类路径

8)更改Test.java以包括对本机函数调用的调用。

package test;

public class Test {

    public native static int getDouble(int n);

    public static void main(String[] args) {
        System.loadLibrary("jni_example");

        for (int n = 1; n <= 20; n++) {
            System.out.println(n + " x 2 = " + getDoubled(n));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

9)再次尝试编译测试会出现问题。

D:\workspace\jni_example>ls
jni_example.dll  test  test_Test.h

D:\workspace\jni_example>javac -classpath . test\Test.java
test\Test.java:11: cannot find symbol
symbol  : method …
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface

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

标签 统计

java ×2

c++ ×1

java-native-interface ×1