小编Tha*_*wen的帖子

困惑,java是否在传递对象引用时使用按值调用或按引用调用?

public class program1{

    public static void main(String args[]){

        java.util.Vector vc=new java.util.Vector();

        vc.add("111");
        vc.add("222");

        functioncall(vc);

        vc.add("333");

        System.out.println(vc);

    }

    public static void functioncall(java.util.Vector vc){     

        vc=null;    

    }
}
Run Code Online (Sandbox Code Playgroud)

上述程序的输出为[111,222,333].但是,当我运行以下程序时,输出为[333].当我们传递引用时会感到困惑,无论是按值调用还是按引用调用,它是如何工作的?为什么

public class program1{

    public static void main(String args[]){

        java.util.Vector vc=new java.util.Vector();

        vc.add("111");
        vc.add("222");

        functioncall(vc);

        vc.add("333");

        System.out.println(vc);

    }

    public static void functioncall(java.util.Vector vc){

        vc.removeAllElements();  

    }
}
Run Code Online (Sandbox Code Playgroud)

java pass-by-reference pass-by-value

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

强制杰克逊使用注释添加附加包装

我有以下课程:

public class Message {
    private String text;

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }    
}
Run Code Online (Sandbox Code Playgroud)

在默认情况下使用Jackson将实例转换为JSON时,我得到:

{"text":"Text"}
Run Code Online (Sandbox Code Playgroud)

我想得到:

{"message":{"text":"Text"}}
Run Code Online (Sandbox Code Playgroud)

是否有任何JAXB/Jackson注释可用于实现我的目标?

作为一种解决方法,我可以用另一个类包装我的类:

public class MessageWrapper {
    private Message message;

    public Message getMessage() {
        return message;
    }

    public void setMessage(Message message) {
        this.message = message;
    }
}
Run Code Online (Sandbox Code Playgroud)

或更通用的解决方案:

public class JsonObjectWrapper<T> {
    /**
     * Using a real map to allow wrapping multiple objects
     */
    private Map<String, T> wrappedObjects = new HashMap<String, T>(); …
Run Code Online (Sandbox Code Playgroud)

java jackson

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

为什么我不应该在添加组件之前调用setVisible(true)?

我已经看过它在这个网站上写了很多次(比如这里这里)你setVisible(true)在向a添加组件之前一定不能打电话JComponent,但我还没有看到解释,互联网上的信息似乎很少.

为什么会这样,如果违反规则会发生什么?

java swing

10
推荐指数
2
解决办法
2784
查看次数

你如何使用Event Dispatch Thread?

我了解了swing如何不是线程安全的.深入研究,我发现对swing组件的每次修改都必须在Event Dispatch Thread上完成,以防止与多线程相关的各种问题.但是,信息似乎完全停止了.似乎没有一个很好的教程可以解释如何在互联网上访问任何地方.

将来自与其他问题相关的代码中的信息修补在一起,似乎我必须在我的程序中的每个swing修改中放置一个不整齐的代码块(就像我自己的代码中的这个例子):

try {
        SwingUtilities.invokeAndWait(new Runnable() {

            public void run() {
                setTitle("Frame title");
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setVisible(true);

                setSize(800, 480);
                setLocationRelativeTo(null);
                setIconImage(Toolkit.getDefaultToolkit().createImage(ClassLoader.getSystemResource("Frame icon.png")));
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

基本上,这是对的吗?我是否必须将代码(或与invokeLater等效的代码)放在代码中对Swing组件的每次修改中?

另外,为什么Swing不会自动执行此操作?

java swing thread-safety event-dispatch-thread

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

在Netbeans中阅读图像

我的项目中有一个图像文件.层次结构如下所示:

项目层次结构

我正在尝试使用以下代码将Manling.png读入Manling.java:

public BufferedImage sprite;

public Manling()
{
    try
    {
    File file = new File("resources/Manling.png");
    sprite = ImageIO.read(file);
    } catch (IOException e) {}

    System.out.println(sprite.toString()); //This line is to test if it works
}
Run Code Online (Sandbox Code Playgroud)

我总是得到NullPointerExceptionprintln语句,所以我假设的路径是错误的.我已经尝试将图像移动到项目中的不同位置,我尝试更改文件路径(例如'mine/resources/Manling.png'和'/resources/Manling.png').有任何想法吗?

如果您想要一个完整的可编译示例,请尝试以下方法:

package minesscce;

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import java.net.URL;

public class Mine extends JFrame
{
private BufferedImage sprite;

public static void main(String args[])
{
    Mine mine = new Mine();
}

public Mine()
{
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setSize(800, …
Run Code Online (Sandbox Code Playgroud)

java swing bufferedimage path

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

为什么在MSVC和Clang不允许的情况下,GCC在此函数模板中允许推导的返回类型?

代码示例:

class A
{
    static constexpr auto GetInt() noexcept { return 6; }

    template<int N>
    std::enable_if_t< N >= GetInt(), int> func() { return N; }
};
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/-0pwIQ

Clang和MSVC都声称GetInt()无法使用,因为当时尚未定义,但是GCC编译时没有错误或警告。

对于为什么会发生错误的最佳猜测是,由于类在时不完整func(),成员函数被认为是未定义的,并且由于auto依赖于函数定义来推断返回类型,因此编译器无法使用它来生成功能签名。

但是,这并不能解释为什么GCC允许这样做。这样做是不正确的吗?

c++ gcc clang visual-c++ template-meta-programming

7
推荐指数
1
解决办法
73
查看次数

在组件边界外绘制

我正在制作一个组件(扩展 JComponent),它将在其顶部绘制一些装饰,部分超出其边界。

我想知道是否有一种使用自包含代码在组件外部进行绘图的方法(例如,我不想在父容器中进行任何绘图)。

java swing drawing clip bounds

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

String上一个最后一个索引

是否有一种简单的方法来获取字符串的倒数第二个分隔子串?

String original = "/1/6/P_55/T_140";
Run Code Online (Sandbox Code Playgroud)

在此示例中,生成的子字符串将是 "P_55/T_140"

我想在这个子串的开头找到正斜杠的索引(/)

我知道String.lastIndexOf()两次打电话会有所帮助.但寻找一种更通用的清洁方法.也许任何N.

java delimited-text

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

Bitshifting Int16仅适用于文字

当我在VS中编写此代码时,它不起作用("无法将'int'隐式转换为'short'.存在显式转换.您是否错过了转换?"):

short A = 5;
short B = 1 << A;
Run Code Online (Sandbox Code Playgroud)

但这段代码绝对没问题:

short A = 1 << 5;
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过将整个表达式作为简短表达来消除错误,但任何人都可以告诉我为什么会发生这种情况吗?

c# short bit-shift

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

使用Java发送邮件时出错

我的代码是:

// File Name SendEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail
{
   public static void main(String [] args)
   {

      // Recipient's email ID needs to be mentioned.
      String to = "toEmail@gmail.com";

      // Sender's email ID needs to be mentioned
      String from = "fromEmail@gmail.com";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.host", host);

      // Get the default Session object. …
Run Code Online (Sandbox Code Playgroud)

java sendmail jakarta-mail javax.mail javax.activation

3
推荐指数
1
解决办法
8814
查看次数