springboot项目用Desktop打开执行指定网页,在Eclipse运行项目正常,但打包成jar部署到服务器无法打开,也不报错

springboot项目用Desktop打开执行指定网页,在Eclipse运行项目正常,但打包成jar部署到服务器无法打开,也不报错,有时间的朋友们,请帮忙给个思路。
我百度查了很多都是 加 -Djava.awt.headless=false 但这个解决的是不能正常启动的问题。

开发环境 win10+Eclipse+jdk8
以下是我的源码

package com.dgpcp.mcs.controller;

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSON;
import com.dgpcp.mcs.pojo.UriInfo;

@RestController
@CrossOrigin
@RequestMapping("/z")
public class HelloController {
    
    private static final Logger log = LoggerFactory.getLogger(HelloController.class);
    
    @GetMapping("/1")
    public String openUrl(UriInfo uriInfo){
        log.info(uriInfo.toString());
        try {
            Desktop desktop = Desktop.getDesktop();
            if ("Y".equals(uriInfo.getFlag())) {
                closeBrowse();
            }
            if (!Desktop.isDesktopSupported()) {
                log.error("desktop.isDesktopSupported() 为 false");
                return JSON.toJSONString("desktop.isDesktopSupported() 为 false");
            }
            if (!desktop.isSupported(Desktop.Action.BROWSE)) {
                log.error("desktop.isSupported(Desktop.Action.BROWSE) 为 false");
                return JSON.toJSONString("desktop.isSupported(Desktop.Action.BROWSE) 为 false");
            }
            URI uri = new URI(uriInfo.getUri());
            desktop.browse(uri);
        } catch (Exception e) {
            return JSON.toJSONString(e.getMessage());
        }
        return JSON.toJSONString("success!");
    }

    private void closeBrowse() {
        try {
            Runtime.getRuntime().exec("taskkill /F /IM iexplorer.exe");
            Runtime.getRuntime().exec("taskkill /im firefox.exe");
            Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}

有可能你的java.awt.Desktop类在服务器上不可用,服务器上没有默认的浏览器desktop.browse(uri)也无法使用的。可以使用HttpURLConnection类来打开网页。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7511765
  • 这篇博客你也可以参考下:Spring boot出现java.awt.HeadlessException的解决办法
  • 除此之外, 这篇博客: 如何用Eclipse创建一个简单的Java程序并编译运行中的 如何用Eclipse创建一个简单的Java程序并编译运行 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    很多新手程序员在第一次使用Eclipse时不知道怎么创建一个Java程序,在确保Eclipse和 JDK安装成功的前提下,可以按照以下步骤进行:

    1.打开Eclipse, 单击菜单栏File,依次点击NewJava Project,如下图所示;
    在这里插入图片描述
    2.随后弹出如下图所示窗口,输入项目名之后,单击Finish
    在这里插入图片描述
    3.这时,部分Eclipse版本可能会跳出一个窗口,询问是否需要新建模块描述信息,本案例涉及内容比较简单,因此点击Don’t Create即可;
    在这里插入图片描述
    4.点开左侧新建的HelloWorld Java项目,在src目录下新建一个class,具体操作为右击src,并依次点击NewClass,并在弹出窗口内输入程序名,单击Finish
    在这里插入图片描述
    在这里插入图片描述
    5.以程序员编程入门的第一个代码Helloworld作为测试,代码如下;

    public class HelloWorld {
    	public static void main(String[] args) {
    		System.out.println("Hello World!");
    	}
    }
    

    6.右击代码行,依次点击Run As1 Java Application运行程序,并输出结果为“Hello World!”,程序运行成功。
    在这里插入图片描述
    上述步骤即在Eclipse中新建Java程序的全过程,希望能对您有所帮助,谢谢!


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^