小编Sav*_*sis的帖子

无法使用Java Desktop在网络上启动文件?

(我有一个问题,我在这个问题中说明但没有正确的答案.我改进了我的问题,并试图编辑最初的问题以反映这一点,但我想因为SO显示未解决的问题的方式它失去了动力,没有办法恢复它.所以我再次发布我的正确问题).


我有一个驻留在共享网络位置的文件:

"\\KUROSAVVAS-PC\Users\kuroSAVVAS\Desktop\New     Folder\Warsaw    Panorama.JPG"
Run Code Online (Sandbox Code Playgroud)

(这些空间是有意的)

以下代码:

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;

public class Test {

    public static void main(String[] args) {
        try {
            String s = "\\\\KUROSAVVAS-PC\\Users\\kuroSAVVAS\\Desktop\\New     Folder\\Warsaw    Panorama.jpg";
            File f = new File(s);
            System.out.println(f.exists());
            Desktop.getDesktop().open(f);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

向控制台打印文件存在(System.out.println(f.exists());)但抛出此异常!:

java.io.IOException: Failed to open file:////KUROSAVVAS-PC/Users/kuroSAVVAS/Desktop/New%20%20%20%20%20Folder/Warsaw%20%20%20%20Panorama.jpg. Error message: The system cannot find the file specified.

    at sun.awt.windows.WDesktopPeer.ShellExecute(WDesktopPeer.java:59)
    at sun.awt.windows.WDesktopPeer.open(WDesktopPeer.java:36)
    at java.awt.Desktop.open(Desktop.java:254)
    at Test.main(Test.java:13)
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会发生这样的事情?我已经尝试了从创建URI到后来解码它们的所有内容......没有任何作用.

java file-io

6
推荐指数
4
解决办法
6159
查看次数

启动intent viewer以显示来自url的图像

我有一个图像的网址.我需要做的是使用intent为图像启动默认图像查看器.

我尝试使用以下方式启动它:

Uri uri = Uri.parse("http://www.google.com/intl/en_ALL/images/srpr/logo1w.png");  
Intent it = new Intent(Intent.ACTION_VIEW);
it.setDataAndType(uri, "image/*")
startActivity(it);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.如果我没有指定数据类型,则intent会启动浏览器,因为数据是url.它基本上工作(因为你可以在浏览器上看到图像),但我想要的是让图库为我显示图像.

我也可以将图像下载到位图中,但我仍然不知道如何使用图库显示位图(如果可能的话).有任何想法吗?

编辑:我尝试将位图保存到缓存,然后在该文件上启动查看器,但它不起作用.你能发现我代码上的任何错误吗?(Utilities类是我写的一个类.该方法只是创建了Bitmap.它有效,这不是问题)

File temp = File.createTempFile("tempImage", ".jpg", getContext().getCacheDir());
Bitmap bmp = Utilities.loadBitmap(largeUrl.toString());
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(temp));
bmp.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.close();
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(temp), "image/jpg");
((Activity) getContext()).startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

编辑2:我决定我可能需要下载的图像,所以我决定先将它们保存在SD卡上.这造成了其他问题.我问了一个新问题,因为这是一个不同的问题.

java android android-intent

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

启动Intent.ACTION_VIEW意图无法处理已保存的图像文件

首先让我说这个问题与我的另一个问题有点联系.实际上它是因为这个而创建的.

我有以下代码将从网上下载的位图写入SD卡中的文件:

// Get image from url
URL u = new URL(url);
HttpGet httpRequest = new HttpGet(u.toURI());
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream instream = bufHttpEntity.getContent();
Bitmap bmImg = BitmapFactory.decodeStream(instream);
instream.close();

// Write image to a file in sd card
File posterFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Android/data/com.myapp/files/image.jpg");
posterFile.createNewFile();
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(posterFile));
Bitmap mutable = Bitmap.createScaledBitmap(bmImg,bmImg.getWidth(),bmImg.getHeight(),true);
mutable.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();

// Launch default …
Run Code Online (Sandbox Code Playgroud)

java android bitmap android-intent

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

Java 中的范围滑块

大家好,我想知道是否有人听说过提供范围滑块的 Java 组件。滑块,即带有两个旋钮,用于定义最小最大值的范围,而不仅仅是一个。

我在网上找到了 perfuse 库中的 JRangeSlider,但我有两个问题。

首先(但不是那么重要)是它有自己的视觉风格,不会改变和融入使用的外观和感觉。

其次(对我的应用程序来说非常重要)是,当您设置Enable(false)时,什么也不会发生!您仍然可以使用滑块。我想禁用它的原因是我在程序中的某个时刻运行了一个新线程,该线程会更改范围滑块也会影响的值。我想在线程运行时简单地禁用滑块,然后再启用它。

有什么想法吗?

java

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

如何在JScrollPane上禁用轮滚动事件的默认绘制行为

我最近购买了Filthy Rich Clients这本书,我发现它非常有用和有趣.在本书的一个例子的基础上,我尝试实现一个自定义ScrollPane,它在要显示的组件的视图底部显示一个"阴影".我最终得到了下面的代码.它工作但不完美.特别是当我通过拖动滚动条滚动窗格时,一切正常,绘画非常流畅.但是当我用鼠标滚动滚动时,阴影闪烁,我不明白为什么.谁能帮我?

编辑:滚动窗格中的任何组件都会发生同样的事情.编辑代码以显示两个帧以查看问题.

编辑2:我已将问题与滚动窗格处理鼠标滚轮事件的方式隔离开来.滚动滚动窗格时,根据滚动的方向稍微向上或向下复制视口的内容,然后绘制进入视图的区域.我的代码使整个组件"脏"但是在组件移动了内容之后.所以你会立刻看到"影子"渐变不合适,直到发出重画.有关如何禁用此功能的任何想法?

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Container;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.RepaintManager;

public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame("Table");
        JFrame f1 = new JFrame("Text Area");
        Object[] names = new Object[] { "Title", "Artist", "Album" };
        String[][] data = new String[][] {
                { "Los Angeles", "Sugarcult", "Lights Out" },
                { …
Run Code Online (Sandbox Code Playgroud)

java swing java-2d repaint

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

如何在Java中强制组件在MigLayout中增长

我有一个由各种组件组成的组件,如复选框,滑块和一些按钮.我想将它添加到滚动窗格并让滑块增长以填充所有剩余空间.这不是问题,因为此代码演示了:

 public static void main(String[] args) {
    JFrame f = new JFrame("Test");
    JPanel c = new JPanel(new MigLayout(
           "",          
           "[]5[]10[grow]10[]0[]0[]0[]",
           "[]"
    ));
    c.add(new JCheckBox(""));
    c.add(new JLabel("Name"));
    c.add(new JSlider());
    c.add(new JButton("1"));
    c.add(new JButton("2"));
    c.add(new JButton("3"));
    c.add(new JButton("4"));
    f.getContentPane().add(new JScrollPane(c));
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.pack();
    f.setVisible(true);
 }
Run Code Online (Sandbox Code Playgroud)

如果您运行此并调整框架大小,滑块将填充所有空间.我的问题在于,我想将我的组件(带滑块的组件)添加到包含此组件的不同实例的另一个组件中.因此,例如它将包含3或4个组件,滑块一个在另一个之下.我认为这会奏效:

 public static void main(String[] args) {
    JFrame f = new JFrame("Test");
    JPanel c = new JPanel(new MigLayout(
           "",          
           "[]5[]10[grow]10[]0[]0[]0[]",
           "[]"
    ));
    c.add(new JCheckBox(""));
    c.add(new JLabel("Name"));
    c.add(new JSlider());
    c.add(new JButton("1"));
    c.add(new JButton("2"));
    c.add(new JButton("3"));
    c.add(new JButton("4"));
    JPanel a …
Run Code Online (Sandbox Code Playgroud)

java layout swing miglayout

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

用Java运行bat文件并等待

你会认为从Java启动一个bat文件是一件容易的事,但是没有...我有一个bat文件,它为一个从文本文件中读取的值循环执行一些sql命令.它或多或少是这样的:

FOR /F %%x in (%CD%\listOfThings.txt) do sqlcmd -Slocalhost\MSSQL %1 %2 -d %3 -i %CD%\SQLScripts\\%%x
exit
Run Code Online (Sandbox Code Playgroud)

不要担心它们不重要的细节.我想要的是简单地从Java中运行这个bat文件,让它等到执行完成.显然这并不容易.到目前为止我所拥有的是:

Runtime.getRuntime().exec("cmd /K start SQLScriptsToRun.bat"
                    +" -U"+getUser()
                    +" -P"+getPass()
                    +" " + projectName);
return true;
Run Code Online (Sandbox Code Playgroud)

问题是exec()方法立即返回.bat文件运行2-3分钟.我尝试删除开始但无济于事.我尝试了很多变化,但它让我无处可去.关于如何完成这个简单任务的任何想法?

java batch-file exec

5
推荐指数
2
解决办法
9102
查看次数

如何将SwingWorker的发布委托给其他方法

我的"问题"可以用以下描述.假设我们有一个密集的过程,我们希望在后台运行并让它更新一个Swing JProgress栏.解决方案很简单:

import java.util.List;

import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;


/**
 * @author Savvas Dalkitsis
 */
public class Test {

    public static void main(String[] args) {
        final JProgressBar progressBar = new JProgressBar(0,99);
        SwingWorker<Void, Integer> w = new SwingWorker<Void, Integer>(){

            @Override
            protected void process(List<Integer> chunks) {
                progressBar.setValue(chunks.get(chunks.size()-1));
            }

            @Override
            protected Void doInBackground() throws Exception {

                for (int i=0;i<100;i++) {
                    publish(i);
                    Thread.sleep(300);
                }

                return null;
            }

        };
        w.execute();
        JOptionPane.showOptionDialog(null,
                new Object[] { "Process", progressBar }, "Process",
                JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
                null, null, null);
    } …
Run Code Online (Sandbox Code Playgroud)

java swingworker

5
推荐指数
2
解决办法
4153
查看次数

JSON字符串以及如何处理转义字符

我正在使用官方JSON库为我的java项目广告我注意到一些奇怪的东西.

如果我有一个像这样的json:

{
  "text": "This is a multiline\n text"
}
Run Code Online (Sandbox Code Playgroud)

我试着得到这样的字符串:

System.out.println(jsonObject.getString("text"));
Run Code Online (Sandbox Code Playgroud)

我在输出上得到了这个:

This is a multiline\n text
Run Code Online (Sandbox Code Playgroud)

代替 :

This is a multiline
text
Run Code Online (Sandbox Code Playgroud)

任何人都知道处理\n和\ t等特殊字符的正确方法吗?我可以随时更换每一个,但我必须逐个处理所有这些.

java string json escaping

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

@interface - 什么?

我知道接口是什么,但我不太了解java知道如何搜索我的答案.那么这意味着什么:

public @interface ThreadSafe { }

// different file

@ThreadSafe
public class Model {
Run Code Online (Sandbox Code Playgroud)

这行是什么意思/做"@interface"?当它应用于"@ThreadSafe"之上时它意味着什么/做什么

android annotations

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