Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有Sparks框架的Jar只适用于控制台,而不适用于双击_Java_Jar_Spark Java - Fatal编程技术网

Java 带有Sparks框架的Jar只适用于控制台,而不适用于双击

Java 带有Sparks框架的Jar只适用于控制台,而不适用于双击,java,jar,spark-java,Java,Jar,Spark Java,结构是 program.jar www(文件夹) www是一个为Spark更改文件的文件夹,所以我使用 externalStaticFileLocation("www"); 当我跑的时候 java -jar program.jar 工作 当我双击启动罐子时 找不到url返回404 有人能帮我吗 谢谢我通常将绝对路径与externalStaticFileLocation 编辑 我还有一个应用程序,出于开发目的,我在其中获得了执行jar的路径。对你来说,我认为一个很好的解决方案是: 声明一个

结构是

  • program.jar
  • www(文件夹)
www是一个为Spark更改文件的文件夹,所以我使用

externalStaticFileLocation("www");
当我跑的时候

java -jar program.jar
工作

当我双击启动罐子时

找不到url返回404

有人能帮我吗


谢谢

我通常将绝对路径与
externalStaticFileLocation

编辑

我还有一个应用程序,出于开发目的,我在其中获得了执行jar的路径。对你来说,我认为一个很好的解决方案是:

声明一个字符串,在我的应用程序中它是一个常量

    public static final String STATIC_FILES_LOCATION_DEV;
创建一个文件实例并获取当前目录,然后连接
www
目录

    File f = new File("");
    STATIC_FILES_LOCATION_DEV = f.getAbsolutePath()
            + "/../www";
将其用作您的资源目录:

    externalStaticFileLocation(STATIC_FILES_LOCATION_DEV);

就是这样。

我通常使用绝对路径和
externalStaticFileLocation

编辑

我还有一个应用程序,出于开发目的,我在其中获得了执行jar的路径。对你来说,我认为一个很好的解决方案是:

声明一个字符串,在我的应用程序中它是一个常量

    public static final String STATIC_FILES_LOCATION_DEV;
创建一个文件实例并获取当前目录,然后连接
www
目录

    File f = new File("");
    STATIC_FILES_LOCATION_DEV = f.getAbsolutePath()
            + "/../www";
将其用作您的资源目录:

    externalStaticFileLocation(STATIC_FILES_LOCATION_DEV);
就这样。

我的答案是

    private static String getWWWDir() {
       String dir = new File("").getAbsolutePath() + "/www";
       File file = new File(dir);

       if(file.exists() && file.isDirectory()) {
           return file.getAbsolutePath();
       }
       else
       {
           String tmpDir = API.class.getProtectionDomain().getCodeSource().getLocation().getFile();
           file = new File(tmpDir);
           dir = file.getParent() + "/www";
           file = new File(dir);
           if(file.exists() && file.isDirectory()) {
               return file.getAbsolutePath();
           }
       }
       return null;
   }
我知道它不漂亮,但对我来说很有用

谢谢你们的帮助

我的答案是

    private static String getWWWDir() {
       String dir = new File("").getAbsolutePath() + "/www";
       File file = new File(dir);

       if(file.exists() && file.isDirectory()) {
           return file.getAbsolutePath();
       }
       else
       {
           String tmpDir = API.class.getProtectionDomain().getCodeSource().getLocation().getFile();
           file = new File(tmpDir);
           dir = file.getParent() + "/www";
           file = new File(dir);
           if(file.exists() && file.isDirectory()) {
               return file.getAbsolutePath();
           }
       }
       return null;
   }
我知道它不漂亮,但对我来说很有用


感谢你们的帮助

但是我怎么知道用户的jar文件在哪里?如果使用jar运行的路径,我将无法再调试项目,因为在项目中有一个目标文件夹,而在jar中没有目标文件夹。导出jar时,所有web资产(html、css、js文件)都在jar中吗?请使用winzip打开您的jar进行检查。否jar中没有web资产。www是与jar位于同一目录中的外部文件夹。由于该工具将html文件下载到www中,因此我无法在JAR中使用它们,因此我认为您有两种选择:将web资产放在类路径中,然后开始使用
staticFileLocation
,或者在运行网站的机器上标准化www文件夹的路径,并在
externalStaticFileLocation
。我已经给出了答案,看一看!但是我怎么知道用户的jar文件在哪里呢?如果使用jar运行的路径,我将无法再调试项目,因为在项目中有一个目标文件夹,而在jar中没有目标文件夹。导出jar时,所有web资产(html、css、js文件)都在jar中吗?请使用winzip打开您的jar进行检查。否jar中没有web资产。www是与jar位于同一目录中的外部文件夹。由于该工具将html文件下载到www中,因此我无法在JAR中使用它们,因此我认为您有两种选择:将web资产放在类路径中,然后开始使用
staticFileLocation
,或者在运行网站的机器上标准化www文件夹的路径,并在
externalStaticFileLocation
。我已经给出了答案,看一看!从cmd行执行和双击执行时,工作目录似乎不同。您是否尝试将其输出到某个日志中,并查看是否有差异?工作目录似乎与目录中的jar相匹配。在这两种情况下,我启动jar时双击路径是我在linux下的主目录。。。这真的很奇怪,当您从cmd行执行和使用双击执行时,工作目录看起来是不同的。您是否尝试将其输出到某个日志中,并查看是否有差异?工作目录似乎与目录中的jar相匹配。在这两种情况下,我启动jar时双击路径是我在linux下的主目录。。。真奇怪