GVKun编程网logo

无法启动 SAS 部署管理器 - java.library.path(sas启动不了)

6

本文将分享无法启动SAS部署管理器-java.library.path的详细内容,并且还将对sas启动不了进行详尽解释,此外,我们还将为大家带来关于Eclipsejava.library.path中没

本文将分享无法启动 SAS 部署管理器 - java.library.path的详细内容,并且还将对sas启动不了进行详尽解释,此外,我们还将为大家带来关于Eclipse java.library.path中没有sapjco3、Java Async IO Library: Quasar (use Fiber)、Java Attach API:动态更改java.library.path、java.lang.UnsatisfiedLinkError: no p2psocket in java.library.path的相关知识,希望对你有所帮助。

本文目录一览:

无法启动 SAS 部署管理器 - java.library.path(sas启动不了)

无法启动 SAS 部署管理器 - java.library.path(sas启动不了)

如何解决无法启动 SAS 部署管理器 - java.library.path?

我正在尝试运行 SAS Deployment Manager 以从我的 Windows 10 电脑上完全卸载 SAS 9.4。

出现弹出窗口“您是否要允许此应用进行更改..”,然后我单击“是”,但没有任何反应。

多亏了 this post,我才能找到日志。

我会复制下面的日志内容。我相信最相关的一行是:ExeProc::ReadFromPipe=Standard output Exception in thread "main" java.lang.UnsatisfiedLinkError: no freetype in java.library.path,但我不知道如何解决它。

感谢您的帮助。

日志:

2021 年 5 月 5 日星期三 23:41:00 启动器启动.... 路径= C:\Users\Andres Silva C\AppData\Local\SAS\SASDeploymentWizard 日志文件= C:\Users\Andres Silva C\AppData\Local\SAS\SASDeploymentWizard\sasdm_2021-5-5-23.41.0.log 2021 年 5 月 5 日星期三 23:41:00 信息:LRun::start::templocation= 2021 年 5 月 5 日星期三 23:41:00 信息: LRun::start::USERHOME=C:\Users\Andres Silva C\AppData\Local\SAS\SASDeploymentWizard 2021 年 5 月 5 日星期三 23:41:00 信息:EnvCalls::isWow64=true 2021 年 5 月 5 日星期三 23:41:00 信息:DataControl::GetProperties::masterProperty=C:\Program Files\SASHome\sassw.config 2021 年 5 月 5 日星期三 23:41:00 信息:LRun::start::param= 2021 年 5 月 5 日星期三 23:41:00 信息:Launcher::Run::start::inifile=C:\Program Files\SASHome\SASDeploymentManager\9.4\sasdm.ini 2021 年 5 月 5 日星期三 23:41:00 信息:启动器::运行::启动::平台=wx6 2021 年 5 月 5 日星期三 23:41:00 信息: Launcher::Run::start::startdir(launchhome)=C:\Program Files\SASHome\SASDeploymentManager\9.4 2021 年 5 月 5 日星期三 23:41:00 信息:Launcher::Run::start::launchercmd=C:\Program Files\SASHome\SASDeploymentManager\9.4\products\privatejre__99477__wx6__xx__sp0__1\bin\java.exe 2021 年 5 月 5 日星期三 23:41:00 信息:Launcher::Run::start::launcherargs=-Xmx1024M -jar "C:\Program Files\SASHome\SASDeploymentManager\9.4\products\deploywiz__94390__prt__xx__sp0__1\deploywiz\setup.jar" -startuplocation "C:\Program Files\SASHome \SASDeploymentManager\9.4" -configure 2021 年 5 月 5 日星期三 23:41:00 信息:Launcher::Run::start::Run with stdout="C:\Program Files\SASHome\SASDeploymentManager\9.4\products\privatejre__99477__wx6__xx__sp0__1\bin\java.exe" -Xmx1024M -jar "C:\Program Files\SASHome \SASDeploymentManager\9.4\products\deploywiz__94390__prt__xx__sp0__1\deploywiz\setup.jar" -startuplocation "C:\Program Files\SASHome\SASDeploymentManager\9.4" -configure 2021 年 5 月 5 日星期三 23:41:00 错误:ExeProc::Exeanddisplay::GetStdHandle::NULL=0 2021 年 5 月 5 日星期三 23:41:00 信息:ExeProc::ReadFromPipe=标准输出 线程“main”中的异常java.lang.UnsatisfiedLinkError:java.library.path中没有freetype

在 java.lang.classLoader.loadLibrary(ClassLoader.java:1886)

在 java.lang.Runtime.loadLibrary0(Runtime.java:849)

在 java.lang.System.loadLibrary(System.java:1088)

在 sun.font.FontManagerNativeLibrary$1.run(FontManagerNativeLibrary.java:59)

在 java.security.AccessController.doPrivileged(Native Method)

在 sun.font.FontManagerNativeLibrary.(FontManagerNativeLibrary.java:32)

在 sun.font.SunFontManager$1.run(SunFontManager.java:339)

在 java.security.AccessController.doPrivileged(Native Method)

在 sun.font.SunFontManager.(SunFontManager.java:335)

在 java.lang.class.forName0(Native Method)

在 java.lang.class.forName(Class.java:274)

在 sun.font.FontManagerFactory$1.run(FontManagerFactory.java:82)

在 java.security.AccessController.doPrivileged(Native Method)

在 sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)

在 java.awt.Font.getFont2D(Font.java:490)

在 java.awt.Font.access$000(Font.java:224)

在 java.awt.Font$FontAccessImpl.getFont2D(Font.java:228)

在 sun.font.FontUtilities.getFont2D(FontUtilities.java:180)

在 sun.font.FontUtilities.fontSupportsDefaultEncoding(FontUtilities.java:338)

在 com.sun.java.swing.plaf.windows.WindowsLookAndFeel$WindowsFontProperty.configureValue(WindowsLookAndFeel.java:2294)

在 com.sun.java.swing.plaf.windows.DesktopProperty.createValue(DesktopProperty.java:154)

在 javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:233)

在 javax.swing.UIDefaults.get(UIDefaults.java:163)

在 javax.swing.MultiuiDefaults.get(MultiuiDefaults.java:64)

在 javax.swing.UIManager.get(UIManager.java:952)

在 com.sas.ssn.Kit.(Kit.java:147)

在 com.sas.ssn.Kit.main(Kit.java:1904)

2021 年 5 月 5 日星期三 23:41:02 信息:ExeProc::Exeanddisplay::GetExitCodeProcess=1 2021 年 5 月 5 日星期三 23:41:02 信息:CWinlauncherApp::InitInstance=1 2021 年 5 月 5 日星期三 23:41:02 信息:CWinlauncherApp::CleanupScript 不存在= 2021 年 5 月 5 日星期三 23:41:02 信息:CWinlauncherApp::ExitInstance=1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Eclipse java.library.path中没有sapjco3

Eclipse java.library.path中没有sapjco3

运行代码时出现此错误。

java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path

我已将jar( sapjco-3.0.jar )添加到文件夹,并在项目中设置了路径。

谢谢。

Java Async IO Library: Quasar (use Fiber)

Java Async IO Library: Quasar (use Fiber)

前言

Quasar 提供很多的功能(Go-like channels, Erlang-like actors),这篇博客主要介绍 Quasar 的核心 Fiber 和使用 Fiber 来处理异步 IO(本博客给出的例子是发起 Http 请求)。

本博客所指的线程均指 Linux 下的线程,Linux 下不区分线程和进程,特别的地方会再做说明。

Fiber 是什么?

Fiber(中文翻译成纤程) 是 JVM 上实现的轻量级用户态线程,和 go 语言的 goroutine 类似。Fiber 有如下几个特点:

  1. 用户态,用户态的线程切换是非常快的,而且单个时间片可以执行更多的代码 (原因:操作系统何时进行线程调度 (时间片用尽,IO 中断,系统调用等))。众所周知,我们在进行系统调用(比如 IO 请求)的时候,当前的线程就会阻塞,产生线程上下文切换(从用户态切换到内核态)Context Switch, 关于这个方面的测试请查看 How long does it take to make a context switch?,从这里可以看出上下文切换的代价是非常高的,这也正是 Fiber 的优势。
  2. 轻量级,Fiber 占有的资源非常少,一个 fiber 大概在 400 bytes of RAM, 所以系统里可以同时有上百万个 Fiber。

为什么使用 Fiber (或者说使用 Threads 有什么问题)?

先看一下在 JVM 中用户态线程和内核态线程的对应关系:

   Thread: 1:1 一个Java 线程对应一个内核线程.(可以被内核调度,消耗context switch)

   Fiber:  M:N mapping to kernel threads.

   Strand:  abstraction of thread or fiber(后面会有介绍).
  • 线程不是轻量的(heavy), 也就是说单机能够产生的线程数量是非常有限的,不能满足现在 Application 并发的需求。
  • 在 Java Web 应用中,我们使用 Java NIO 来接收 TCP 请求,线程和 TCP 连接是不匹配的。这种方式缺点是比较难以编码和维护(只是在 Library 中使用,很少有用户代码中直接使用的), 而 Fiber 采取的方式是:"thread (fiber)-per-connection"

怎样不阻塞(non-block)?

传统做法:

  1. CallBacks (hell) 传统的回调,对应的问题就是末日金字塔...
public void messageFriend() {
       withModule(() -> {
                 withConnection(richard -> {
                        richard.dataHandler(data -> {
                                assertEquals("bob>oh its you!", data.toString());
                                moduleTestComplete();
                           });
                        richard.write("richard\n");
                        withConnection(bob -> {
                                       bob.dataHandler(data -> {
                                                                          assertEquals("richard>hai",data.toString());
                               bob.write("richard<oh its you!");
                               });
                        bob.write("bob\n");
                 vertx.setTimer(6, id -> richard.write("bob<hai"));
             });
         });
       });
}

2.Monads

In Java8 like:

  CompletableFuture.supplyAsync().thenAccept()...

这个要优于回调,它去除回调金字塔,但是也有如下的缺点,手动的上下文管理(需要在 CompletableFuture 里面执行),并发逻辑不清晰(你会有很多的 .then ().then ()),还需要改变接口(方法需要返回 CompletableFuture)

你可以在这里看到更多的内容 Monads vs Scoped Continuations

Fiber 的做法: Just Block, 因为 Fiber 是轻量的,可以 Suspend 和 Resume,Fiber 的执行过程是这样的,你创建并启动一个 Fiber (Fiber 创建和使用和线程一样):

new Fiber<Void>(new SuspendableRunnable() {
  public void run() throws SuspendExecution, InterruptedException {
    // your code
    bar(); // call bar;
  }
}).start();

然后由 Schedule(有默认提供) 调度,当 Fiber 需要 block 的时候,调用 Fiber.park (),Schedule 可以执行其它的操作(效率就是在这个时候体现出来的),然后 block 完的时候 又通过 Fiber.unpark () 继续执行。

输入图片说明

输入图片说明

Fiber 在 JVM 上的实现方式 (ByteCode instrumentation)

1. 怎么 instrument:

Quasar fibers 依赖 bytecode instrumentation. 可以通过 Java Agent 在类加载的时候实现,也可以通过在编译期间通过 Ant task 来是实现。实现的效果就是在原来的代码中插入一些额外的代码(或者说字节码)。

2. 为什么 Fiber 是 Suspendable 和 Resumeable 的,就是通过一个 Stack 来存储代码执行的相关信息:

class Stack{
    int[] method;  // PC(程序计数器), SP(栈指针)
    long[] dataLong; // stack premitives(基地址)
    Object[] dataObject; // stack refs (相关引用)
}

3.Instrumentation 之后在 JVM 中的执行过程:

before :

if bar() run in a fiber, and it call foo(),so foo() should be Suspendable.

bar(){
    baz();
    foo();          
}

foo(){
    Fiber.park(); // throw Exception
}

after:

bar(){
    int pc = isFiber ? s.pc :0;
    switch(pc){
        case 0:
            baz():
            if(isFiber){
                s.pc=1;
                // store locals -> s
            }
        case 1:
            if(isFiber)
                // load locals <-s
            foo(); // suspendable
    }            
}

foo(){
    int pc =isFiber ? s.pc : 0;
    switch(pc){
        if(isFiber){
            s.pc = 3;
            // store locals -> s
        }
        Fiber.park(); // throw Exception
    case 3:
        if(isFiber)
            // load locals <- s
    }
}

JVM 上使用 Fiber 的一些问题

  • Interfaces/superclasses:iff have a suspendable implementation (dynamic proxies marked manually)
  • Reflection,invoke dynamic:presumed suspendable(except lambdas)
  • Which methods to instrument?(manual/graph analysis)
  • Instrument "infection":if we`re conservative and automatic,a lot of methods must be instrumented(e.g. consider Runnable being suspendable - and all it`s callers...)

这些问题的意思是说在进行 Instrument 的过程中,针对接口和动态代理方法,只有在运行时才能决定具体的实现类 (决定具体的调用方法),所以需要手动管理列出这些类,这也是 Fiber 使用起来比较繁琐的一点,大家可以参考我最后给出的例子,例子中会给大家一个大概的说明(主要是为了新手少踩一些坑)。官方文档也给了详细的说明,需要耐心一点看完。

Fiber 的使用场景

Fibers are not meant to replace threads in all circumstances. A fiber should be used when its body (the code it executes) blocks very often waiting on other fibers (e.g. waiting for messages sent by other fibers on a channel, or waiting for the value of a dataflow-variable). For long-running computations that rarely block, traditional threads are preferable. Fortunately, as we shall see, fibers and threads interoperate very well.

Fiber 适用于阻塞频繁的代码(比如 IO 阻塞),而且如果需要消耗 CPU 的代码使用 Thread, 它们可以同时抽象为前面的 Strand, 这样的话优势就会高于 Node(Node 通过单线程异步来高效实现 IO 请求处理,具体对比我会给出另外一篇博客)。

怎样开始?

建议感兴趣的朋友从官方文档开始 Quasar

另外我做了一个使用 Spring Boot 和 Fiber 来做 HttpClient 的 demo, 放在 GitHub 上,以供大家参考 spring-quasar-demo。

下一篇我会介绍在使用 Fiber 来做 HttpServer。

Java Attach API:动态更改java.library.path

Java Attach API:动态更改java.library.path

在Windows计算机上使用com.sun.tools.attach API时,调用以下命令时出现以下错误

VirtualMachine.list()

java.lang.UnsatisfiedLinkError:java.library.path中没有附加

原因是缺少attach.dll。attach.dll位于$JRE/bin/。当启动我的Java程序时,-Djava.library.path=[Directoryto the attach.dll]一切正常,没有错误输出。

现在,我不想添加每个Java程序来启动这个丑陋的JVM参数。因此,我的问题是:

  1. 我的机器配置是否正确,并且$JRE/bin/应该在库路径中吗?

  2. 如果没有,如何动态添加路径?System.setProperties("java.library.path",StringOfThePathToTheAttach.dll);无法解决。库路径已更改,但无论如何都会出现错误。这与SecurityManager或JVM启动有关吗?

答案1

小编典典

System.setProperty("java.library.path",StringOfThePathToTheAttach.dll);应该工作。我的猜测是您称呼为时已晚。换句话说,在设置属性之前,尝试访问DLL。

您可以在代码中设置了属性之后,又在有问题的方法调用之前再次输出java.library.path的当前值吗?

即,如果在看到“设置属性后”之前看到“ Before.dll调用之前”输出,则说明问题出在哪里。

编辑:

指向本机库的一种更好的方法是System.load(StringOfThePathToTheAttach.dll)在有问题的代码行之前再次使用-。

java.lang.UnsatisfiedLinkError: no p2psocket in java.library.path

java.lang.UnsatisfiedLinkError: no p2psocket in java.library.path

Exception in thread "main" java.lang.UnsatisfiedLinkError: no p2psocket in java.library.path
 at java.lang.ClassLoader.loadLibrary(Unknown Source)
 at java.lang.Runtime.loadLibrary0(Unknown Source)
 at java.lang.System.loadLibrary(Unknown Source)
 at test.P2pTest.<clinit>(P2pTest.java:9)

这是出现的错误,按照一些答案所讲,往java.library.path里加了.so文件进去,但是仍然会报以上错误,请大师们帮忙解决

附上代码

public class P2pTest {
 
 public native void pccConnectP2PServer(String ip, short port);
 
 static
 {
 System.loadLibrary("p2psocket");
    }
 
 public static void main(String[] args) {
  System.out.println(System.getProperty("java.library.path"));
  P2pTest pTest = new P2pTest();
  pTest.pccConnectP2PServer("192.168.1.213",(short)50001);
 }
 
 
}

今天的关于无法启动 SAS 部署管理器 - java.library.pathsas启动不了的分享已经结束,谢谢您的关注,如果想了解更多关于Eclipse java.library.path中没有sapjco3、Java Async IO Library: Quasar (use Fiber)、Java Attach API:动态更改java.library.path、java.lang.UnsatisfiedLinkError: no p2psocket in java.library.path的相关知识,请在本站进行查询。

本文标签: